import { appConfig } from '../../entities/AppConfig.fixture'; import { AgentAuthClient } from '../../clients/AgentAuthClient'; import { AgentState } from '../../state/AgentState'; import { AgentLoginController } from './AgentLogin'; import { Mock, It, IMock, Times } from 'typemoq'; import { expect } from 'chai'; describe('Agent login controller', () => { let agentAuthClient: IMock; let agentState: AgentState; let controller: AgentLoginController; beforeEach(() => { agentAuthClient = Mock.ofType(); agentState = { username: null }; controller = new AgentLoginController(agentAuthClient.object, agentState); }); it('should login the agent using the provided details', () => { const loginResponse = Promise.resolve({ data: { username: 'john' } }); agentAuthClient.setup(x => x.login('john', 'password')).returns(() => loginResponse).verifiable(); controller.username = 'john'; controller.password = 'password'; controller.login(); agentAuthClient.verifyAll(); return loginResponse.then(_ => expect(agentState.username).to.equal("john")); }); it('should propagate the error if login failed', () => { const loginResponse = Promise.reject<{}>({ data: { message: "Invalid details" } }); agentAuthClient.setup(x => x.login('john', 'password')).returns(() => loginResponse).verifiable(); controller.username = 'john'; controller.password = 'password'; controller.login(); agentAuthClient.verifyAll(); return loginResponse.catch(_ => expect(agentState.username).to.be.null && expect(controller.error.message).to.equal("Invalid details") ); }) it('should not attempt a login if the form is incomplete', () => { controller.login(); agentAuthClient.verify(x => x.login(It.isAnyString(), It.isAnyString()), Times.never()); }); });