@@ -8,9 +8,10 @@ import { NoopAnimationsModule } from '@angular/platform-browser/animations';
88import { UserProfile } from 'realtime-server/lib/esm/common/models/user' ;
99import { createTestUserProfile } from 'realtime-server/lib/esm/common/models/user-test-data' ;
1010import { CheckingAnswerExport , CheckingConfig } from 'realtime-server/lib/esm/scriptureforge/models/checking-config' ;
11- import { SFProjectProfile } from 'realtime-server/lib/esm/scriptureforge/models/sf-project' ;
11+ import { ParatextUserProfile } from 'realtime-server/lib/esm/scriptureforge/models/paratext-user-profile' ;
12+ import { SFProject , SFProjectProfile } from 'realtime-server/lib/esm/scriptureforge/models/sf-project' ;
1213import { SFProjectRole } from 'realtime-server/lib/esm/scriptureforge/models/sf-project-role' ;
13- import { createTestProjectProfile } from 'realtime-server/lib/esm/scriptureforge/models/sf-project-test-data' ;
14+ import { createTestProject } from 'realtime-server/lib/esm/scriptureforge/models/sf-project-test-data' ;
1415import { of } from 'rxjs' ;
1516import { anything , mock , verify , when } from 'ts-mockito' ;
1617import { ActivatedProjectService } from 'xforge-common/activated-project.service' ;
@@ -28,20 +29,18 @@ import { TestRealtimeService } from 'xforge-common/test-realtime.service';
2829import { configureTestingModule , emptyHammerLoader , TestTranslocoModule } from 'xforge-common/test-utils' ;
2930import { UICommonModule } from 'xforge-common/ui-common.module' ;
3031import { UserService } from 'xforge-common/user.service' ;
31- import { ParatextProject } from '../../core/models/paratext-project' ;
3232import { SFProjectDoc } from '../../core/models/sf-project-doc' ;
3333import { SFProjectProfileDoc } from '../../core/models/sf-project-profile-doc' ;
3434import { SF_PROJECT_ROLES } from '../../core/models/sf-project-role-info' ;
3535import { SF_TYPE_REGISTRY } from '../../core/models/sf-type-registry' ;
36- import { ParatextService } from '../../core/paratext.service' ;
3736import { SFProjectService } from '../../core/sf-project.service' ;
3837import { SharedModule } from '../../shared/shared.module' ;
38+ import { paratextUsersFromRoles } from '../../shared/test-utils' ;
3939import { CollaboratorsComponent , UserType } from './collaborators.component' ;
4040
4141const mockedActivatedProject = mock ( ActivatedProjectService ) ;
4242const mockedNoticeService = mock ( NoticeService ) ;
4343const mockedProjectService = mock ( SFProjectService ) ;
44- const mockedParatextService = mock ( ParatextService ) ;
4544const mockedUserService = mock ( UserService ) ;
4645const mockedDialogService = mock ( DialogService ) ;
4746
@@ -61,7 +60,6 @@ describe('CollaboratorsComponent', () => {
6160 { provide : ActivatedProjectService , useMock : mockedActivatedProject } ,
6261 { provide : NoticeService , useMock : mockedNoticeService } ,
6362 { provide : SFProjectService , useMock : mockedProjectService } ,
64- { provide : ParatextService , useMock : mockedParatextService } ,
6563 { provide : UserService , useMock : mockedUserService } ,
6664 { provide : OnlineStatusService , useClass : TestOnlineStatusService } ,
6765 { provide : DialogService , useMock : mockedDialogService } ,
@@ -86,7 +84,7 @@ describe('CollaboratorsComponent', () => {
8684 env . fixture . detectChanges ( ) ;
8785 tick ( ) ;
8886 env . fixture . detectChanges ( ) ;
89- const numParatextUsers = 3 ;
87+ const numParatextUsers = 5 ;
9088 expect ( env . userRowsByCategory ( UserType . Paratext ) . length ) . toEqual ( numParatextUsers ) ;
9189 expect ( env . noUsersLabel ( UserType . Paratext ) ) . toBeNull ( ) ;
9290 expect ( env . userTable ( UserType . Guest ) ) . toBeNull ( ) ;
@@ -102,7 +100,7 @@ describe('CollaboratorsComponent', () => {
102100
103101 expect ( env . noUsersLabel ( UserType . Paratext ) ) . toBeNull ( ) ;
104102 expect ( env . noUsersLabel ( UserType . Guest ) ) . toBeNull ( ) ;
105- const numParatextUsers = 3 ;
103+ const numParatextUsers = 5 ;
106104 const numProjectGuests = 1 ;
107105 expect ( env . userRowsByCategory ( UserType . Paratext ) . length ) . toEqual ( numParatextUsers ) ;
108106 expect ( env . userRowsByCategory ( UserType . Guest ) . length ) . toEqual ( numProjectGuests ) ;
@@ -134,11 +132,11 @@ describe('CollaboratorsComponent', () => {
134132 tick ( ) ;
135133 env . fixture . detectChanges ( ) ;
136134
137- const numParatextUsers = 3 ;
135+ const numParatextUsers = 5 ;
138136 expect ( env . userRowsByCategory ( UserType . Paratext ) . length ) . toEqual ( numParatextUsers ) ;
139137 expect (
140138 env . component . projectUsers . find ( u => u . userType === UserType . Paratext ) ! . rows . map ( r => r . user . displayName )
141- ) . toEqual ( [ 'User 01' , 'User 02' , 'User Not On SF ' ] ) ;
139+ ) . toEqual ( [ 'User 01' , 'User 02' , 'User C' , 'User B' , 'User A '] ) ;
142140 expect ( env . userRowsByCategory ( UserType . Paratext ) [ 0 ] . nativeElement . querySelector ( '.user-more-menu' ) ) . not . toBeNull ( ) ;
143141 expect ( env . userRowsByCategory ( UserType . Paratext ) [ 1 ] . nativeElement . querySelector ( '.user-more-menu' ) ) . not . toBeNull ( ) ;
144142 expect ( env . userRowsByCategory ( UserType . Paratext ) [ 2 ] . nativeElement . querySelector ( '.user-more-menu' ) ) . toBeNull ( ) ;
@@ -157,7 +155,7 @@ describe('CollaboratorsComponent', () => {
157155 tick ( ) ;
158156 env . fixture . detectChanges ( ) ;
159157
160- const numParatextUsers = 3 ;
158+ const numParatextUsers = 5 ;
161159 const numGuestUsers = 1 ;
162160 const numInvitees = 3 ;
163161 expect ( env . userRowsByCategory ( UserType . Paratext ) . length ) . toEqual ( numParatextUsers ) ;
@@ -188,26 +186,14 @@ describe('CollaboratorsComponent', () => {
188186 { email :
'[email protected] ' , role :
'sf_community_checker' , expired :
false } 189187 ] ) ;
190188
191- when ( mockedParatextService . getProjects ( ) ) . thenResolve ( [
192- {
193- paratextId : 'paratextId1' ,
194- name : 'Project 01' ,
195- members : [
196- { username : 'A User' , role : SFProjectRole . ParatextConsultant , connectedToProject : false } ,
197- { username : 'B User' , role : SFProjectRole . ParatextTranslator , connectedToProject : false } ,
198- { username : 'C User' , role : SFProjectRole . ParatextAdministrator , connectedToProject : false }
199- ]
200- } as ParatextProject
201- ] ) ;
202-
203189 env . fixture . detectChanges ( ) ;
204190 tick ( ) ;
205191 env . fixture . detectChanges ( ) ;
206192
207193 expect ( env . userRowsByCategory ( UserType . Paratext ) . length ) . toEqual ( 5 ) ;
208194 expect ( env . userRowsByCategory ( UserType . Guest ) . length ) . toEqual ( 4 ) ;
209195 const paratextRows = Array . from ( env . component . projectUsers . find ( u => u . userType === UserType . Paratext ) ! . rows ) ;
210- expect ( paratextRows . map ( r => r . user . displayName ) ) . toEqual ( [ 'User 01' , 'User 02' , 'C User' , 'B User' , 'A User' ] ) ;
196+ expect ( paratextRows . map ( r => r . user . displayName ) ) . toEqual ( [ 'User 01' , 'User 02' , 'User C ' , 'User B ' , 'User A ' ] ) ;
211197 const guestRows = Array . from ( env . component . projectUsers . find ( u => u . userType === UserType . Guest ) ! . rows ) ;
212198 expect ( guestRows . map ( r => r . user . displayName ?? r . user . email ) ) . toEqual ( [
213199 'User 03' ,
@@ -217,18 +203,6 @@ describe('CollaboratorsComponent', () => {
217203 ] ) ;
218204 } ) ) ;
219205
220- it ( 'handle error from paratext project query' , fakeAsync ( ( ) => {
221- const env = new TestEnvironment ( ) ;
222- when ( mockedParatextService . getProjects ( ) ) . thenThrow ( new Error ( 'Network error' ) ) ;
223- env . setupProjectData ( ) ;
224- env . fixture . detectChanges ( ) ;
225- expect ( ( ) => {
226- tick ( ) ;
227- } ) . not . toThrow ( ) ;
228- verify ( mockedNoticeService . show ( anything ( ) ) ) . once ( ) ;
229- tick ( ) ;
230- } ) ) ;
231-
232206 it ( 'handle error from invited users query, when user is not on project' , fakeAsync ( ( ) => {
233207 // If an admin user is removed from the project, or loses admin
234208 // privileges, while looking at the component, they will run loadUsers
@@ -461,17 +435,6 @@ class TestEnvironment {
461435 }
462436 ) ;
463437
464- when ( mockedParatextService . getProjects ( ) ) . thenResolve ( [
465- {
466- paratextId : 'paratextId1' ,
467- name : 'Project 01' ,
468- members : [
469- { connectedToProject : true , username : 'User 01' , role : SFProjectRole . ParatextAdministrator } ,
470- { connectedToProject : true , username : 'User 02' , role : SFProjectRole . ParatextTranslator } ,
471- { connectedToProject : false , username : 'User Not On SF' , role : SFProjectRole . ParatextTranslator }
472- ]
473- } as ParatextProject
474- ] ) ;
475438 this . realtimeService . addSnapshots < UserProfile > ( UserProfileDoc . COLLECTION , [
476439 {
477440 id : 'user01' ,
@@ -611,20 +574,27 @@ class TestEnvironment {
611574 this . fixture . detectChanges ( ) ;
612575 }
613576
614- private createProject ( userRoles : { [ userRef : string ] : string } ) : SFProjectProfile {
615- return createTestProjectProfile ( {
577+ private createProject ( userRoles : { [ userRef : string ] : string } ) : SFProject {
578+ const paratextUsers : ParatextUserProfile [ ] = paratextUsersFromRoles ( userRoles ) ;
579+ const ptMembersNotConnected = [
580+ { username : 'User A' , opaqueUserId : 'opaqueA' , role : SFProjectRole . ParatextObserver } ,
581+ { username : 'User B' , opaqueUserId : 'opaqueB' , role : SFProjectRole . ParatextTranslator } ,
582+ { username : 'User C' , opaqueUserId : 'opaqueC' , role : SFProjectRole . ParatextAdministrator }
583+ ] ;
584+ paratextUsers . push ( ...ptMembersNotConnected ) ;
585+ return createTestProject ( {
616586 checkingConfig : {
617587 checkingEnabled : false ,
618588 usersSeeEachOthersResponses : false ,
619589 answerExportMethod : CheckingAnswerExport . MarkedForExport
620590 } ,
621- userRoles
591+ userRoles,
592+ paratextUsers
622593 } ) ;
623594 }
624595
625596 private setupThisProjectData ( projectId : string , project : SFProjectProfile ) : void {
626- const projectDoc = { id : projectId , data : project } as SFProjectProfileDoc ;
627- when ( mockedActivatedProject . changes$ ) . thenReturn ( of ( projectDoc ) ) ;
597+ when ( mockedActivatedProject . projectId$ ) . thenReturn ( of ( projectId ) ) ;
628598 this . realtimeService . addSnapshot < SFProjectProfile > ( SFProjectDoc . COLLECTION , {
629599 id : projectId ,
630600 data : project
0 commit comments