Forward port getallgroupmemberswithallmembers to master (#5658)

* Added graph API test for getting all groups along with its members

Signed-off-by: sagargurung1001@gmail.com <sagargurung1001@gmail.com>

* Refactor implementation code

Signed-off-by: sagargurung1001@gmail.com <sagargurung1001@gmail.com>

* PR address

Signed-off-by: sagargurung1001@gmail.com <sagargurung1001@gmail.com>

* Update the local api expected to failure

* Review Address

---------

Signed-off-by: sagargurung1001@gmail.com <sagargurung1001@gmail.com>
This commit is contained in:
Sagar Gurung
2023-02-27 11:16:50 +05:45
committed by GitHub
parent 8ec167d792
commit 028ca42fed
4 changed files with 160 additions and 0 deletions
@@ -52,3 +52,56 @@ Feature: get groups and their members
When user "Brian" gets all the members of group "tea-lover" using the Graph API
Then the HTTP status code should be "401"
And the last response should be an unauthorized response
Scenario: admin user gets all groups along with its member's information
Given these users have been created with default attributes and without skeleton files:
| username |
| Brian |
| Carol |
And group "tea-lover" has been created
And group "coffee-lover" has been created
And user "Alice" has been added to group "tea-lover"
And user "Brian" has been added to group "coffee-lover"
And user "Carol" has been added to group "tea-lover"
When user "Alice" retrieves all groups along with their members using the Graph API
Then the HTTP status code should be "200"
And the group 'coffee-lover' should have the following member information
| displayName | id | mail | onPremisesSamAccountName |
| Brian Murphy | %uuid_v4% | brian@example.org | Brian |
And the group 'tea-lover' should have the following member information
| displayName | id | mail | onPremisesSamAccountName |
| Alice Hansen | %uuid_v4% | alice@example.org | Alice |
| Carol King | %uuid_v4% | carol@example.org | Carol |
Scenario: normal user gets all groups along with their members information
Given user "Brian" has been created with default attributes and without skeleton files
And group "tea-lover" has been created
And group "coffee-lover" has been created
And user "Alice" has been added to group "tea-lover"
And user "Brian" has been added to group "coffee-lover"
When user "Brian" retrieves all groups along with their members using the Graph API
Then the HTTP status code should be "401"
And the last response should be an unauthorized response
Scenario: admin user gets a group along with their members information
Given user "Brian" has been created with default attributes and without skeleton files
And group "tea-lover" has been created
And user "Alice" has been added to group "tea-lover"
And user "Brian" has been added to group "tea-lover"
When user "Alice" gets all the members information of group "tea-lover" using the Graph API
And the group 'tea-lover' should have the following member information
| displayName | id | mail | onPremisesSamAccountName |
| Alice Hansen | %uuid_v4% | alice@example.org | Alice |
| Brian Murphy | %uuid_v4% | brian@example.org | Brian |
Scenario: normal user gets a group along with their members information
Given user "Brian" has been created with default attributes and without skeleton files
And group "tea-lover" has been created
And user "Alice" has been added to group "tea-lover"
And user "Brian" has been added to group "tea-lover"
When user "Brian" gets all the members information of group "tea-lover" using the Graph API
Then the HTTP status code should be "401"
And the last response should be an unauthorized response
@@ -598,6 +598,26 @@ class GraphContext implements Context {
);
}
/**
*
* @param string $user
* @param string|null $group
*
* @return ResponseInterface
* @throws GuzzleException
*/
public function listSingleOrAllGroupsAlongWithAllMemberInformation(string $user, ?string $group = null): ResponseInterface {
$credentials = $this->getAdminOrUserCredentials($user);
return GraphHelper::getSingleOrAllGroupsAlongWithMembers(
$this->featureContext->getBaseUrl(),
$this->featureContext->getStepLineRef(),
$credentials["username"],
$credentials["password"],
($group) ? $this->featureContext->getAttributeOfCreatedGroup($group, 'id') : null
);
}
/**
* returns list of users of a group
*
@@ -996,6 +1016,59 @@ class GraphContext implements Context {
$this->featureContext->setResponse($this->listGroupMembers($group, $user));
}
/**
* @When user :user retrieves all groups along with their members using the Graph API
* @When user :user gets all the members information of group :group using the Graph API
*
* @param string $user
* @param string $group
*
* @return void
* @throws GuzzleException
*/
public function userRetrievesAllMemberInformationOfSingleOrAllGroups(string $user, string $group = ''): void {
$this->featureContext->setResponse($this->listSingleOrAllGroupsAlongWithAllMemberInformation($user, $group));
}
/**
* @Then the group :group should have the following member information
*
* @param string $group
* @param TableNode $table
*
* @return void
* @throws GuzzleException
*/
public function theGroupShouldHaveTheFollowingMemberInformation(string $group, TableNode $table): void {
$response = $this->featureContext->getJsonDecodedResponse($this->featureContext->getResponse());
$rows = $table->getHash();
$currentMemberIndex = 0;
if (isset($response['value'])) {
$response = $response['value'];
$groupFoundInResponse = false;
foreach ($response as $value) {
if ($value['displayName'] === $group) {
$groupFoundInResponse = true;
foreach ($rows as $row) {
$this->checkUserInformation($row, $value['members'][$currentMemberIndex]);
$currentMemberIndex++;
}
break;
}
}
if (!$groupFoundInResponse) {
throw new Error(
'Group ' . $group . " could not be found in the response."
);
}
} else {
foreach ($rows as $row) {
$this->checkUserInformation($row, $response['members'][$currentMemberIndex]);
$currentMemberIndex++;
}
}
}
/**
* @Then the last response should be an unauthorized response
*