#= require u2f/register #= require u2f/util #= require u2f/error #= require u2f #= require ./mock_u2f_device describe 'U2FRegister', -> U2FUtil.enableTestMode() fixture.load('u2f/register') beforeEach -> @u2fDevice = new MockU2FDevice @container = $("#js-register-u2f") @component = new U2FRegister(@container, $("#js-register-u2f-templates"), {}, "token") @component.start() it 'allows registering a U2F device', -> setupButton = @container.find("#js-setup-u2f-device") expect(setupButton.text()).toBe('Setup New U2F Device') setupButton.trigger('click') inProgressMessage = @container.children("p") expect(inProgressMessage.text()).toContain("Trying to communicate with your device") @u2fDevice.respondToRegisterRequest({deviceData: "this is data from the device"}) registeredMessage = @container.find('p') deviceResponse = @container.find('#js-device-response') expect(registeredMessage.text()).toContain("Your device was successfully set up!") expect(deviceResponse.val()).toBe('{"deviceData":"this is data from the device"}') describe "errors", -> it "doesn't allow the same device to be registered twice (for the same user", -> setupButton = @container.find("#js-setup-u2f-device") setupButton.trigger('click') @u2fDevice.respondToRegisterRequest({errorCode: 4}) errorMessage = @container.find("p") expect(errorMessage.text()).toContain("already been registered with us") it "displays an error message for other errors", -> setupButton = @container.find("#js-setup-u2f-device") setupButton.trigger('click') @u2fDevice.respondToRegisterRequest({errorCode: "error!"}) errorMessage = @container.find("p") expect(errorMessage.text()).toContain("There was a problem communicating with your device") it "allows retrying registration after an error", -> setupButton = @container.find("#js-setup-u2f-device") setupButton.trigger('click') @u2fDevice.respondToRegisterRequest({errorCode: "error!"}) retryButton = @container.find("#U2FTryAgain") retryButton.trigger('click') setupButton = @container.find("#js-setup-u2f-device") setupButton.trigger('click') @u2fDevice.respondToRegisterRequest({deviceData: "this is data from the device"}) registeredMessage = @container.find("p") expect(registeredMessage.text()).toContain("Your device was successfully set up!")