Skip to content

Commit

Permalink
...to one that is on the way to handling its own needs
Browse files Browse the repository at this point in the history
  • Loading branch information
marksvc committed Feb 19, 2025
1 parent 1687540 commit feaf535
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,7 @@ import { anything, instance, mock, verify, when } from 'ts-mockito';
import { TestRealtimeModule } from 'xforge-common/test-realtime.module';
import { TestRealtimeService } from 'xforge-common/test-realtime.service';
import { configureTestingModule, TestTranslocoModule } from 'xforge-common/test-utils';
import {
ActivatedProjectService,
TestActivatedProjectService
} from '../../../../xforge-common/activated-project.service';
import { TestActivatedProjectModule } from '../../../../xforge-common/activated-project.service';
import {
createTestFeatureFlag,
FeatureFlagService
Expand All @@ -27,24 +24,27 @@ import { DraftSource, DraftSourcesAsArrays, DraftSourcesService } from '../draft
import { DraftSourcesComponent, sourceArraysToSettingsChange } from './draft-sources.component';

const mockedParatextService = mock(ParatextService);
let testActivatedProjectService: TestActivatedProjectService | undefined = undefined;
const mockedNoticeService = mock(NoticeService);
const mockedI18nService = mock(I18nService);
const mockedDraftSourcesService = mock(DraftSourcesService);
const mockedSFProjectService = mock(SFProjectService);
const mockedSFUserProjectsService = mock(SFUserProjectsService);
const mockedFeatureFlagService = mock(FeatureFlagService);
const mockedPermissionsService = mock(PermissionsService);

describe('DraftSourcesComponent', () => {
configureTestingModule(() => ({
imports: [TestRealtimeModule.forRoot(SF_TYPE_REGISTRY), NoopAnimationsModule, TestTranslocoModule],
imports: [
TestRealtimeModule.forRoot(SF_TYPE_REGISTRY),
NoopAnimationsModule,
TestTranslocoModule,
TestActivatedProjectModule.forRoot('project01', mockedSFProjectService, mockedPermissionsService)
],
declarations: [],
providers: [
{ provide: ParatextService, useMock: mockedParatextService },
{ provide: ActivatedProjectService, useFactory: () => testActivatedProjectService },
{ provide: NoticeService, useMock: mockedNoticeService },
{ provide: I18nService, useMock: mockedI18nService },
{ provide: SFProjectService, useMock: mockedSFProjectService },
{ provide: DraftSourcesService, useMock: mockedDraftSourcesService },
{ provide: SFUserProjectsService, useMock: mockedSFUserProjectsService },
{ provide: FeatureFlagService, useMock: mockedFeatureFlagService }
Expand Down Expand Up @@ -347,11 +347,6 @@ class TestEnvironment {
draftingSources: [instance(mock<DraftSource>())]
};
when(mockedDraftSourcesService.getDraftProjectSources()).thenReturn(of(draftProjectSources));
testActivatedProjectService = TestActivatedProjectService.withProjectId(
'project01',
TestBed.inject(SFProjectService),
instance(mock(PermissionsService))
);
when(mockedFeatureFlagService.allowAdditionalTrainingSource).thenReturn(createTestFeatureFlag(true));
// TODO return actual list
when(mockedSFUserProjectsService.projectDocs$).thenReturn(of([]));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ export class DraftSourcesComponent extends DataLoadingComponent implements OnIni
}

get targetLanguageDisplayName(): string | undefined {
if (this.trainingTargets.length == 0) {
if (this.trainingTargets.length === 0) {
console.log('not fully initialized');
return undefined;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
import { Inject, Injectable } from '@angular/core';
import { Inject, Injectable, ModuleWithProviders, NgModule } from '@angular/core';
import { TestBed } from '@angular/core/testing';
import { ActivationEnd, Router } from '@angular/router';
import ObjectID from 'bson-objectid';
import { BehaviorSubject, Observable, of } from 'rxjs';
import { filter, map, startWith, switchMap } from 'rxjs/operators';
import { instance } from 'ts-mockito';
import { SFProjectProfileDoc } from '../app/core/models/sf-project-profile-doc';
import { PermissionsService } from '../app/core/permissions.service';
import { SFProjectService } from '../app/core/sf-project.service';
Expand Down Expand Up @@ -132,15 +134,42 @@ export class TestActivatedProjectService extends ActivatedProjectService {
super(projectService, cacheService, activeProjectIdService);
}

static withProjectId(
static withProjectId(projectId: string): TestActivatedProjectService {
if (TestBed.inject(TestActivatedProjectModule, null) == null) {
throw new Error(
'TestActivatedProjectService.withProjectId() requires TestActivatedProjectModule. ' +
'Please add to TestBed imports:\n' +
'imports: [TestActivatedProjectModule.forRoot({ projectId, sfProjectService, permissionsService })]'
);
}
return TestBed.inject(TestActivatedProjectService);
}
}

/** Provides test environment for components needing ActivatedProjectService */
@NgModule({})
export class TestActivatedProjectModule {
static forRoot(
projectId: string,
sfProjectService: SFProjectService,
permissionsService: PermissionsService
): TestActivatedProjectService {
return new TestActivatedProjectService(
sfProjectService,
new CacheService(sfProjectService, permissionsService),
new TestActiveProjectIdService(projectId)
);
): ModuleWithProviders<TestActivatedProjectModule> {
return {
ngModule: TestActivatedProjectModule,
providers: [
{ provide: SFProjectService, useValue: instance(sfProjectService) },
{ provide: PermissionsService, useValue: instance(permissionsService) },
{
// TODO Or should this provide just `ActivatedProjectService`?
provide: TestActivatedProjectService,
useFactory: () =>
new TestActivatedProjectService(
instance(sfProjectService),
new CacheService(instance(sfProjectService), instance(permissionsService)),
new TestActiveProjectIdService(projectId)
)
}
]
};
}
}

0 comments on commit feaf535

Please sign in to comment.