@@ -37,6 +37,7 @@ import {MatSortModule} from "@angular/material/sort";
37
37
import { BreakpointObserver } from "@angular/cdk/layout" ;
38
38
import { FilesCacheService } from "../files-cache/files-cache.service" ;
39
39
import { mockFilesCacheService } from "../files-cache/files-cache.service.spec" ;
40
+ import { RuleService } from "../rules/rule.service" ;
40
41
41
42
function mockRenderAndWaitForChanges ( ) {
42
43
let fixture = MockRender ( FileListComponent , null , { reset : true } ) ;
@@ -65,6 +66,10 @@ describe('FileListComponent', () => {
65
66
provide : FilesCacheService ,
66
67
useValue : mock < FilesCacheService > ( )
67
68
} )
69
+ . provide ( {
70
+ provide : RuleService ,
71
+ useValue : mock < RuleService > ( )
72
+ } )
68
73
. replace ( BrowserAnimationsModule , NoopAnimationsModule )
69
74
) ;
70
75
@@ -518,6 +523,27 @@ describe('FileListComponent', () => {
518
523
let result = await page . getCategoriesInDialog ( ) ;
519
524
expect ( result ) . toEqual ( [ 'cat1' , 'cat1b' ] )
520
525
} ) )
526
+
527
+ it ( 'should prevent category assignment when the file categories were automatically assigned' , fakeAsync ( async ( ) => {
528
+ // Arrange
529
+ let file = mockFileElement ( 'name' ) ;
530
+ mockFilesCacheService ( [ file ] , true ) ;
531
+
532
+ let ruleService = ngMocks . get ( RuleService ) ;
533
+ let fileToMatchingRuleMap = new Map ( ) ;
534
+ fileToMatchingRuleMap . set ( file . id , "existing rule" ) ;
535
+ when ( ( ) => ruleService . getFileToMatchingRuleMap ( ) ) . thenResolve ( fileToMatchingRuleMap ) ;
536
+
537
+ let fixture = mockRenderAndWaitForChanges ( ) ;
538
+ let page = new Page ( fixture ) ;
539
+
540
+ // Act
541
+ Page . openItemMenu ( 'name' ) ;
542
+ let isMenuDisabled = await page . isMenuAssignCategoryDisabled ( ) ;
543
+
544
+ // Assert
545
+ expect ( isMenuDisabled ) . toBeTruthy ( ) ;
546
+ } ) )
521
547
} )
522
548
523
549
describe ( 'Filter by file name' , ( ) => {
@@ -859,6 +885,10 @@ class Page {
859
885
await this . clickMenu ( '.set-category-file' ) ;
860
886
}
861
887
888
+ isMenuAssignCategoryDisabled ( ) {
889
+ return this . isMenuDisabled ( '.set-category-file' ) ;
890
+ }
891
+
862
892
async setCategoryInDialog ( category : string ) {
863
893
let testElement = await this . typeCategoryInDialog ( category ) ;
864
894
await testElement . sendKeys ( TestKey . ENTER )
@@ -939,4 +969,15 @@ class Page {
939
969
await matMenuHarness ?. clickItem ( { selector : selector } ) ;
940
970
}
941
971
972
+ private async isMenuDisabled ( selector : string ) {
973
+ let matMenuHarnesses = await this . loader . getAllHarnesses ( MatMenuHarness ) ;
974
+ // The menu should be the one opened
975
+ let matMenuHarness = await findAsyncSequential ( matMenuHarnesses , value => value . isOpen ( ) ) ;
976
+ if ( ! matMenuHarness ) {
977
+ throw new Error ( "No menu for selector: " + selector ) ;
978
+ }
979
+ let menuItems = await matMenuHarness . getItems ( { selector : selector } ) ;
980
+ return menuItems [ 0 ] . isDisabled ( ) ;
981
+ }
982
+
942
983
}
0 commit comments