anonymous-student
Version:
Anonymous student is used to retrieve and save information from our website users.
146 lines (110 loc) • 4.99 kB
text/typescript
import { IEventAggregationService } from '@studyportals/event-aggregation-service-interface';
import { AttendanceType, StudentField } from '@studyportals/studentdomain';
import { suite, test } from '@testdeck/mocha';
import { assert } from 'chai';
import * as Moq from 'typemoq';
import { Actor, InterestType } from '../../../interfaces/enumerations';
import { OnlineStudentRepositoryState } from '../../../src/domain/states/online-student-repository-state';
import { StudentRepository } from '../../../src/domain/student-repository';
import { AnonymousStudentEventBroadcaster } from '../../../src/infrastructure/anonymous-student-event-broadcaster';
import { CachedStudentClient } from '../../../src/infrastructure/clients/cached-student-client';
import { LocalStudentClient } from '../../../src/infrastructure/clients/local-student-client';
import { StudentAPIClient } from '../../../src/infrastructure/clients/student-api-client';
class OnlineStudentRepositoryStateTest {
private testInstanceMock: Moq.IMock<OnlineStudentRepositoryState>;
private eventAggregationServiceMock: Moq.IMock<any>;
private sessionServiceMock: Moq.IMock<any>;
private studentRepositoryMock: Moq.IMock<StudentRepository>;
private studentClientMock: Moq.IMock<CachedStudentClient>;
private get studentRepository(): StudentRepository {
return this.studentRepositoryMock.object;
}
private get studentClient(): CachedStudentClient {
return this.studentClientMock.object;
}
private get sessionService(): any {
return this.sessionServiceMock.object;
}
private get eventAggregationService(): IEventAggregationService {
return this.eventAggregationServiceMock.object;
}
private get testInstance(): OnlineStudentRepositoryState {
return this.testInstanceMock.object;
}
public before(): void {
this.testInstanceMock = Moq.Mock.ofType(OnlineStudentRepositoryState);
this.testInstanceMock.callBase = true;
this.eventAggregationServiceMock = Moq.Mock.ofType<IEventAggregationService>();
this.sessionServiceMock = Moq.Mock.ofType<any>();
this.studentRepositoryMock = Moq.Mock.ofType<StudentRepository>();
this.studentClientMock = Moq.Mock.ofType<CachedStudentClient>();
this.testInstanceMock
.setup((x) => x['studentRepository'])
.returns(() => this.studentRepository);
this.testInstanceMock
.setup((x) => x['studentClient'])
.returns(() => this.studentClient);
this.testInstanceMock
.setup((x) => x['sessionService'])
.returns(() => this.sessionService);
this.testInstanceMock
.setup((x) => x['eventAggregationService'])
.returns(() => this.eventAggregationService);
}
public async constructStudentClient_Should_Return_CachedStudentClient_When_Called(): Promise<void> {
// given
// when
const client = this.testInstance['constructStudentClient']();
// then
assert.instanceOf(client, CachedStudentClient);
}
public async constructStudentClient_Should_Return_CachedStudentClient_With_CorrectParameters_When_Called(): Promise<void> {
// given
// when
const client = this.testInstance['constructStudentClient']();
// then
assert.instanceOf(client['studentAPIClient'], StudentAPIClient);
assert.instanceOf(client['localStudentClient'], LocalStudentClient);
assert.equal(client['eventAggregationService'], this.eventAggregationService);
assert.instanceOf(client['anonymousStudentEventBroadcaster'], AnonymousStudentEventBroadcaster);
}
public async setStudentData_Should_Call_SetData_StudentClient_When_Called(): Promise<void> {
// given
const givenData = {first_name: 'henk'};
// when
await this.testInstance.setStudentData(givenData, Actor.AUTOMATION);
// then
this.studentClientMock.verify((x) => x.setData(givenData), Moq.Times.once());
}
public async getStudentData_Should_Call_GetData_StudentClient_When_Called(): Promise<void> {
// given
const fields = [StudentField.DISCIPLINES];
// when
await this.testInstance.getStudentData(fields);
// then
this.studentClientMock.verify((x) => x.getData(fields), Moq.Times.once());
}
public async addToCollection_Should_Call_StudentRepository_addToCollection_When_Called(): Promise<void> {
// given
this.studentClientMock.setup((x) => x.addToCollection(Moq.It.isAny(), Moq.It.isAny()));
// when
await this.testInstance.addToCollection(StudentField.ATTENDANCE, [AttendanceType.ONLINE]);
// then
this.studentClientMock.verify((x) => x.addToCollection(Moq.It.isAny(), Moq.It.isAny()), Moq.Times.once());
}
public async removeFromCollection_Should_Call_StudentRepository_addToCollection_When_Called(): Promise<void> {
// given
this.studentClientMock.setup((x) => x.removeFromCollection(Moq.It.isAny(), Moq.It.isAny()));
// when
await this.testInstance.removeFromCollection(StudentField.INTERESTS_COUNTRIES, [1, 4, 76]);
// then
this.studentClientMock.verify((x) => x.removeFromCollection(Moq.It.isAny(), Moq.It.isAny()), Moq.Times.once());
}
}