@@ -519,6 +519,217 @@ func TestPatchTemplateMeta(t *testing.T) {
519
519
require .NoError (t , err )
520
520
assert .Equal (t , updated .Icon , "" )
521
521
})
522
+
523
+ t .Run ("UserPerms" , func (t * testing.T ) {
524
+ t .Parallel ()
525
+
526
+ t .Run ("OK" , func (t * testing.T ) {
527
+ t .Parallel ()
528
+
529
+ client := coderdtest .New (t , nil )
530
+ user := coderdtest .CreateFirstUser (t , client )
531
+ _ , user2 := coderdtest .CreateAnotherUserWithUser (t , client , user .OrganizationID )
532
+ version := coderdtest .CreateTemplateVersion (t , client , user .OrganizationID , nil )
533
+ template := coderdtest .CreateTemplate (t , client , user .OrganizationID , version .ID )
534
+ req := codersdk.UpdateTemplateMeta {
535
+ UserPerms : map [string ]codersdk.TemplateRole {
536
+ user2 .ID .String (): codersdk .TemplateRoleRead ,
537
+ },
538
+ }
539
+
540
+ ctx , cancel := context .WithTimeout (context .Background (), testutil .WaitLong )
541
+ defer cancel ()
542
+
543
+ template , err := client .UpdateTemplateMeta (ctx , template .ID , req )
544
+ require .NoError (t , err )
545
+
546
+ role , ok := template .UserRoles [user2 .ID .String ()]
547
+ require .True (t , ok , "User not contained within user_roles map" )
548
+ require .Equal (t , codersdk .TemplateRoleRead , role )
549
+ })
550
+
551
+ t .Run ("DeleteUser" , func (t * testing.T ) {
552
+ t .Parallel ()
553
+
554
+ client := coderdtest .New (t , nil )
555
+ user := coderdtest .CreateFirstUser (t , client )
556
+ _ , user2 := coderdtest .CreateAnotherUserWithUser (t , client , user .OrganizationID )
557
+ _ , user3 := coderdtest .CreateAnotherUserWithUser (t , client , user .OrganizationID )
558
+ version := coderdtest .CreateTemplateVersion (t , client , user .OrganizationID , nil )
559
+ template := coderdtest .CreateTemplate (t , client , user .OrganizationID , version .ID )
560
+ req := codersdk.UpdateTemplateMeta {
561
+ UserPerms : map [string ]codersdk.TemplateRole {
562
+ user2 .ID .String (): codersdk .TemplateRoleRead ,
563
+ user3 .ID .String (): codersdk .TemplateRoleWrite ,
564
+ },
565
+ }
566
+
567
+ ctx , cancel := context .WithTimeout (context .Background (), testutil .WaitLong )
568
+ defer cancel ()
569
+
570
+ template , err := client .UpdateTemplateMeta (ctx , template .ID , req )
571
+ require .NoError (t , err )
572
+
573
+ role , ok := template .UserRoles [user2 .ID .String ()]
574
+ require .True (t , ok , "User not contained within user_roles map" )
575
+ require .Equal (t , codersdk .TemplateRoleRead , role )
576
+
577
+ role , ok = template .UserRoles [user3 .ID .String ()]
578
+ require .True (t , ok , "User not contained within user_roles map" )
579
+ require .Equal (t , codersdk .TemplateRoleWrite , role )
580
+
581
+ req = codersdk.UpdateTemplateMeta {
582
+ UserPerms : map [string ]codersdk.TemplateRole {
583
+ user2 .ID .String (): codersdk .TemplateRoleAdmin ,
584
+ user3 .ID .String (): codersdk .TemplateRoleDeleted ,
585
+ },
586
+ }
587
+
588
+ template , err = client .UpdateTemplateMeta (ctx , template .ID , req )
589
+ require .NoError (t , err )
590
+
591
+ role , ok = template .UserRoles [user2 .ID .String ()]
592
+ require .True (t , ok , "User not contained within user_roles map" )
593
+ require .Equal (t , codersdk .TemplateRoleAdmin , role )
594
+
595
+ _ , ok = template .UserRoles [user3 .ID .String ()]
596
+ require .False (t , ok , "User should have been deleted from user_roles map" )
597
+ })
598
+
599
+ t .Run ("InvalidUUID" , func (t * testing.T ) {
600
+ t .Parallel ()
601
+
602
+ client := coderdtest .New (t , nil )
603
+ user := coderdtest .CreateFirstUser (t , client )
604
+ version := coderdtest .CreateTemplateVersion (t , client , user .OrganizationID , nil )
605
+ template := coderdtest .CreateTemplate (t , client , user .OrganizationID , version .ID )
606
+ req := codersdk.UpdateTemplateMeta {
607
+ UserPerms : map [string ]codersdk.TemplateRole {
608
+ "hi" : "admin" ,
609
+ },
610
+ }
611
+
612
+ ctx , cancel := context .WithTimeout (context .Background (), testutil .WaitLong )
613
+ defer cancel ()
614
+
615
+ _ , err := client .UpdateTemplateMeta (ctx , template .ID , req )
616
+ require .Error (t , err )
617
+ cerr , _ := codersdk .AsError (err )
618
+ require .Equal (t , http .StatusBadRequest , cerr .StatusCode ())
619
+ })
620
+
621
+ t .Run ("InvalidUser" , func (t * testing.T ) {
622
+ t .Parallel ()
623
+
624
+ client := coderdtest .New (t , nil )
625
+ user := coderdtest .CreateFirstUser (t , client )
626
+ version := coderdtest .CreateTemplateVersion (t , client , user .OrganizationID , nil )
627
+ template := coderdtest .CreateTemplate (t , client , user .OrganizationID , version .ID )
628
+ req := codersdk.UpdateTemplateMeta {
629
+ UserPerms : map [string ]codersdk.TemplateRole {
630
+ uuid .NewString (): "admin" ,
631
+ },
632
+ }
633
+
634
+ ctx , cancel := context .WithTimeout (context .Background (), testutil .WaitLong )
635
+ defer cancel ()
636
+
637
+ _ , err := client .UpdateTemplateMeta (ctx , template .ID , req )
638
+ require .Error (t , err )
639
+ cerr , _ := codersdk .AsError (err )
640
+ require .Equal (t , http .StatusBadRequest , cerr .StatusCode ())
641
+ })
642
+
643
+ t .Run ("InvalidRole" , func (t * testing.T ) {
644
+ t .Parallel ()
645
+
646
+ client := coderdtest .New (t , nil )
647
+ user := coderdtest .CreateFirstUser (t , client )
648
+ _ , user2 := coderdtest .CreateAnotherUserWithUser (t , client , user .OrganizationID )
649
+ version := coderdtest .CreateTemplateVersion (t , client , user .OrganizationID , nil )
650
+ template := coderdtest .CreateTemplate (t , client , user .OrganizationID , version .ID )
651
+ req := codersdk.UpdateTemplateMeta {
652
+ UserPerms : map [string ]codersdk.TemplateRole {
653
+ user2 .ID .String (): "updater" ,
654
+ },
655
+ }
656
+
657
+ ctx , cancel := context .WithTimeout (context .Background (), testutil .WaitLong )
658
+ defer cancel ()
659
+
660
+ _ , err := client .UpdateTemplateMeta (ctx , template .ID , req )
661
+ require .Error (t , err )
662
+ cerr , _ := codersdk .AsError (err )
663
+ require .Equal (t , http .StatusBadRequest , cerr .StatusCode ())
664
+ })
665
+
666
+ t .Run ("RegularUserCannotUpdatePerms" , func (t * testing.T ) {
667
+ t .Parallel ()
668
+
669
+ client := coderdtest .New (t , nil )
670
+ user := coderdtest .CreateFirstUser (t , client )
671
+ client2 , user2 := coderdtest .CreateAnotherUserWithUser (t , client , user .OrganizationID )
672
+ version := coderdtest .CreateTemplateVersion (t , client , user .OrganizationID , nil )
673
+ template := coderdtest .CreateTemplate (t , client , user .OrganizationID , version .ID )
674
+ req := codersdk.UpdateTemplateMeta {
675
+ UserPerms : map [string ]codersdk.TemplateRole {
676
+ user2 .ID .String (): codersdk .TemplateRoleWrite ,
677
+ },
678
+ }
679
+
680
+ ctx , cancel := context .WithTimeout (context .Background (), testutil .WaitLong )
681
+ defer cancel ()
682
+
683
+ template , err := client .UpdateTemplateMeta (ctx , template .ID , req )
684
+ require .NoError (t , err )
685
+
686
+ req = codersdk.UpdateTemplateMeta {
687
+ UserPerms : map [string ]codersdk.TemplateRole {
688
+ user2 .ID .String (): codersdk .TemplateRoleAdmin ,
689
+ },
690
+ }
691
+
692
+ template , err = client2 .UpdateTemplateMeta (ctx , template .ID , req )
693
+ require .Error (t , err )
694
+ cerr , _ := codersdk .AsError (err )
695
+ require .Equal (t , http .StatusNotFound , cerr .StatusCode ())
696
+ })
697
+
698
+ t .Run ("RegularUserWithAdminCanUpdate" , func (t * testing.T ) {
699
+ t .Parallel ()
700
+
701
+ client := coderdtest .New (t , nil )
702
+ user := coderdtest .CreateFirstUser (t , client )
703
+ client2 , user2 := coderdtest .CreateAnotherUserWithUser (t , client , user .OrganizationID )
704
+ _ , user3 := coderdtest .CreateAnotherUserWithUser (t , client , user .OrganizationID )
705
+ version := coderdtest .CreateTemplateVersion (t , client , user .OrganizationID , nil )
706
+ template := coderdtest .CreateTemplate (t , client , user .OrganizationID , version .ID )
707
+ req := codersdk.UpdateTemplateMeta {
708
+ UserPerms : map [string ]codersdk.TemplateRole {
709
+ user2 .ID .String (): codersdk .TemplateRoleAdmin ,
710
+ },
711
+ }
712
+
713
+ ctx , cancel := context .WithTimeout (context .Background (), testutil .WaitLong )
714
+ defer cancel ()
715
+
716
+ template , err := client .UpdateTemplateMeta (ctx , template .ID , req )
717
+ require .NoError (t , err )
718
+
719
+ req = codersdk.UpdateTemplateMeta {
720
+ UserPerms : map [string ]codersdk.TemplateRole {
721
+ user3 .ID .String (): codersdk .TemplateRoleRead ,
722
+ },
723
+ }
724
+
725
+ template , err = client2 .UpdateTemplateMeta (ctx , template .ID , req )
726
+ require .NoError (t , err )
727
+
728
+ role , ok := template .UserRoles [user3 .ID .String ()]
729
+ require .True (t , ok , "User not contained within user_roles map" )
730
+ require .Equal (t , codersdk .TemplateRoleRead , role )
731
+ })
732
+ })
522
733
}
523
734
524
735
func TestDeleteTemplate (t * testing.T ) {
0 commit comments