@@ -492,3 +492,178 @@ run "group_member_type_invalid" {
492492
493493 expect_failures = [var . users ]
494494}
495+
496+ # -----------------------------------------------------------------------------
497+ # --- validate multiple users in single group
498+ # -----------------------------------------------------------------------------
499+
500+ run "multiple_users_single_group_success" {
501+ command = apply # Uses mock provider, no real resources created
502+
503+ providers = {
504+ googleworkspace = googleworkspace.mock
505+ }
506+
507+ variables {
508+ users = {
509+ " user1@example.com" = {
510+ primary_email = " user1@example.com"
511+ family_name = " One"
512+ given_name = " User"
513+ groups = {
514+ " shared-team" = {
515+ role = " member"
516+ }
517+ }
518+ }
519+ " user2@example.com" = {
520+ primary_email = " user2@example.com"
521+ family_name = " Two"
522+ given_name = " User"
523+ groups = {
524+ " shared-team" = {
525+ role = " owner"
526+ }
527+ }
528+ }
529+ " user3@example.com" = {
530+ primary_email = " user3@example.com"
531+ family_name = " Three"
532+ given_name = " User"
533+ groups = {
534+ " shared-team" = {
535+ role = " manager"
536+ }
537+ }
538+ }
539+ }
540+ groups = {
541+ " shared-team" = {
542+ name = " Shared Team"
543+ email = " shared-team@example.com"
544+ }
545+ }
546+ }
547+
548+ assert {
549+ condition = googleworkspace_group_member. user_to_groups [" shared-team@example.com/user1@example.com" ]. role == " MEMBER"
550+ error_message = " Expected user1 role to be 'MEMBER', got: ${ googleworkspace_group_member . user_to_groups [" shared-team@example.com/user1@example.com" ]. role } "
551+ }
552+
553+ assert {
554+ condition = googleworkspace_group_member. user_to_groups [" shared-team@example.com/user2@example.com" ]. role == " OWNER"
555+ error_message = " Expected user2 role to be 'OWNER', got: ${ googleworkspace_group_member . user_to_groups [" shared-team@example.com/user2@example.com" ]. role } "
556+ }
557+
558+ assert {
559+ condition = googleworkspace_group_member. user_to_groups [" shared-team@example.com/user3@example.com" ]. role == " MANAGER"
560+ error_message = " Expected user3 role to be 'MANAGER', got: ${ googleworkspace_group_member . user_to_groups [" shared-team@example.com/user3@example.com" ]. role } "
561+ }
562+
563+ assert {
564+ condition = googleworkspace_group_member. user_to_groups [" shared-team@example.com/user1@example.com" ]. group_id == " shared-team@example.com"
565+ error_message = " Expected group_id to be 'shared-team@example.com'"
566+ }
567+ }
568+
569+ run "single_user_multiple_groups_success" {
570+ command = apply # Uses mock provider, no real resources created
571+
572+ providers = {
573+ googleworkspace = googleworkspace.mock
574+ }
575+
576+ variables {
577+ users = {
578+ " multi.group@example.com" = {
579+ primary_email = " multi.group@example.com"
580+ family_name = " Group"
581+ given_name = " Multi"
582+ groups = {
583+ " dev-team" = {
584+ role = " member"
585+ }
586+ " admin-team" = {
587+ role = " owner"
588+ }
589+ }
590+ }
591+ }
592+ groups = {
593+ " dev-team" = {
594+ name = " Development Team"
595+ email = " dev-team@example.com"
596+ }
597+ " admin-team" = {
598+ name = " Admin Team"
599+ email = " admin-team@example.com"
600+ }
601+ " not-used-group" = {
602+ name = " Not Used Group"
603+ email = " not-used-group@example.com"
604+ }
605+ }
606+ }
607+
608+ assert {
609+ condition = googleworkspace_group_member. user_to_groups [" dev-team@example.com/multi.group@example.com" ]. role == " MEMBER"
610+ error_message = " Expected user role in dev-team to be 'MEMBER', got: ${ googleworkspace_group_member . user_to_groups [" dev-team@example.com/multi.group@example.com" ]. role } "
611+ }
612+
613+ assert {
614+ condition = googleworkspace_group_member. user_to_groups [" admin-team@example.com/multi.group@example.com" ]. role == " OWNER"
615+ error_message = " Expected user role in admin-team to be 'OWNER', got: ${ googleworkspace_group_member . user_to_groups [" admin-team@example.com/multi.group@example.com" ]. role } "
616+ }
617+
618+ assert {
619+ condition = googleworkspace_group_member. user_to_groups [" dev-team@example.com/multi.group@example.com" ]. email == " multi.group@example.com"
620+ error_message = " Expected user email in dev-team to be 'multi.group@example.com'"
621+ }
622+
623+ assert {
624+ condition = googleworkspace_group_member. user_to_groups [" admin-team@example.com/multi.group@example.com" ]. email == " multi.group@example.com"
625+ error_message = " Expected user email in admin-team to be 'multi.group@example.com'"
626+ }
627+
628+ assert {
629+ condition = ! contains (keys (googleworkspace_group_member. user_to_groups ), " not-used-group@example.com/multi.group@example.com" )
630+ error_message = " Expected user to not be in not-used-group"
631+ }
632+ }
633+
634+ run "user_references_nonexistent_group_failure" {
635+ command = plan
636+
637+ providers = {
638+ googleworkspace = googleworkspace.mock
639+ }
640+
641+ variables {
642+ users = {
643+ " bad.user@example.com" = {
644+ primary_email = " bad.user@example.com"
645+ family_name = " User"
646+ given_name = " Bad"
647+ groups = {
648+ " existing-group" = {
649+ role = " member"
650+ }
651+ " missing-group" = {
652+ role = " member"
653+ }
654+ }
655+ }
656+ }
657+ groups = {
658+ " existing-group" = {
659+ name = " Existing Group"
660+ email = " existing-group@example.com"
661+ }
662+ # Note: missing-group is not defined here
663+ }
664+ }
665+
666+ expect_failures = [
667+ googleworkspace_group_member . user_to_groups
668+ ]
669+ }
0 commit comments