github.com/gophercloud/gophercloud@v1.11.0/internal/acceptance/openstack/identity/v3/groups_test.go (about)

     1  //go:build acceptance
     2  // +build acceptance
     3  
     4  package v3
     5  
     6  import (
     7  	"testing"
     8  
     9  	"github.com/gophercloud/gophercloud/internal/acceptance/clients"
    10  	"github.com/gophercloud/gophercloud/internal/acceptance/tools"
    11  	"github.com/gophercloud/gophercloud/openstack/identity/v3/groups"
    12  	th "github.com/gophercloud/gophercloud/testhelper"
    13  )
    14  
    15  func TestGroupCRUD(t *testing.T) {
    16  	clients.RequireAdmin(t)
    17  
    18  	client, err := clients.NewIdentityV3Client()
    19  	th.AssertNoErr(t, err)
    20  
    21  	description := "Test Groups"
    22  	domainID := "default"
    23  	createOpts := groups.CreateOpts{
    24  		Description: description,
    25  		DomainID:    domainID,
    26  		Extra: map[string]interface{}{
    27  			"email": "testgroup@example.com",
    28  		},
    29  	}
    30  
    31  	// Create Group in the default domain
    32  	group, err := CreateGroup(t, client, &createOpts)
    33  	th.AssertNoErr(t, err)
    34  	defer DeleteGroup(t, client, group.ID)
    35  
    36  	tools.PrintResource(t, group)
    37  	tools.PrintResource(t, group.Extra)
    38  
    39  	th.AssertEquals(t, group.Description, description)
    40  	th.AssertEquals(t, group.DomainID, domainID)
    41  	th.AssertDeepEquals(t, group.Extra, createOpts.Extra)
    42  
    43  	description = ""
    44  	updateOpts := groups.UpdateOpts{
    45  		Description: &description,
    46  		Extra: map[string]interface{}{
    47  			"email": "thetestgroup@example.com",
    48  		},
    49  	}
    50  
    51  	newGroup, err := groups.Update(client, group.ID, updateOpts).Extract()
    52  	th.AssertNoErr(t, err)
    53  
    54  	tools.PrintResource(t, newGroup)
    55  	tools.PrintResource(t, newGroup.Extra)
    56  
    57  	th.AssertEquals(t, newGroup.Description, description)
    58  	th.AssertDeepEquals(t, newGroup.Extra, updateOpts.Extra)
    59  
    60  	listOpts := groups.ListOpts{
    61  		DomainID: "default",
    62  	}
    63  
    64  	// List all Groups in default domain
    65  	allPages, err := groups.List(client, listOpts).AllPages()
    66  	th.AssertNoErr(t, err)
    67  
    68  	allGroups, err := groups.ExtractGroups(allPages)
    69  	th.AssertNoErr(t, err)
    70  
    71  	for _, g := range allGroups {
    72  		tools.PrintResource(t, g)
    73  		tools.PrintResource(t, g.Extra)
    74  	}
    75  
    76  	var found bool
    77  	for _, group := range allGroups {
    78  		tools.PrintResource(t, group)
    79  		tools.PrintResource(t, group.Extra)
    80  
    81  		if group.Name == newGroup.Name {
    82  			found = true
    83  		}
    84  	}
    85  
    86  	th.AssertEquals(t, found, true)
    87  
    88  	listOpts.Filters = map[string]string{
    89  		"name__contains": "TEST",
    90  	}
    91  
    92  	allPages, err = groups.List(client, listOpts).AllPages()
    93  	th.AssertNoErr(t, err)
    94  
    95  	allGroups, err = groups.ExtractGroups(allPages)
    96  	th.AssertNoErr(t, err)
    97  
    98  	found = false
    99  	for _, group := range allGroups {
   100  		tools.PrintResource(t, group)
   101  		tools.PrintResource(t, group.Extra)
   102  
   103  		if group.Name == newGroup.Name {
   104  			found = true
   105  		}
   106  	}
   107  
   108  	th.AssertEquals(t, found, true)
   109  
   110  	listOpts.Filters = map[string]string{
   111  		"name__contains": "foo",
   112  	}
   113  
   114  	allPages, err = groups.List(client, listOpts).AllPages()
   115  	th.AssertNoErr(t, err)
   116  
   117  	allGroups, err = groups.ExtractGroups(allPages)
   118  	th.AssertNoErr(t, err)
   119  
   120  	found = false
   121  	for _, group := range allGroups {
   122  		tools.PrintResource(t, group)
   123  		tools.PrintResource(t, group.Extra)
   124  
   125  		if group.Name == newGroup.Name {
   126  			found = true
   127  		}
   128  	}
   129  
   130  	th.AssertEquals(t, found, false)
   131  
   132  	// Get the recently created group by ID
   133  	p, err := groups.Get(client, group.ID).Extract()
   134  	th.AssertNoErr(t, err)
   135  
   136  	tools.PrintResource(t, p)
   137  }