Skip to content

Commit 8d43a90

Browse files
feat: group membership tests (#18)
## Summary - Add test for multiple users in single group scenario - Add test for single user belonging to multiple groups - Add test for user referencing non-existent group (failure case) ## Test Coverage Added - **Multiple Users, Single Group**: Validates that multiple users can be assigned to the same group with different roles (member, owner, manager) - **Single User, Multiple Groups**: Verifies one user can belong to multiple groups while ensuring they're not added to unused groups - **Non-existent Group Reference**: Tests failure handling when users reference groups that don't exist in the groups variable ## Technical Details - All tests use mock provider for safe execution - Tests validate proper role assignment and group membership creation - Comprehensive assertions ensure group_id, email, and role mappings work correctly - Failure test confirms proper error handling for configuration issues 🤖 Generated with [Claude Code](https://claude.ai/code)
1 parent bb77160 commit 8d43a90

File tree

2 files changed

+176
-0
lines changed

2 files changed

+176
-0
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,5 +45,6 @@ backend.tf.json
4545
**/*.*swp
4646
**/.DS_Store
4747

48+
CLAUDE.md
4849
.cursor/rules
4950
.claude

tests/variables_users.tftest.hcl

Lines changed: 175 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)