Merge pull request #19791 from owncloud/provisioning_api_adding_integration_tests

Added more tests and fixed a problem with asort which was returning f…
This commit is contained in:
Thomas Müller 2015-10-22 10:16:10 +02:00
commit ad4ef8d91c
3 changed files with 343 additions and 88 deletions

View File

@ -9,6 +9,7 @@ default:
admin: admin:
- admin - admin
- admin - admin
regular_user_password: 123456
ci: ci:
formatter: formatter:

View File

@ -34,6 +34,7 @@ class FeatureContext extends BehatContext {
// Initialize your context here // Initialize your context here
$this->baseUrl = $parameters['baseUrl']; $this->baseUrl = $parameters['baseUrl'];
$this->adminUser = $parameters['admin']; $this->adminUser = $parameters['admin'];
$this->regularUser = $parameters['regular_user_password'];
// in case of ci deployment we take the server url from the environment // in case of ci deployment we take the server url from the environment
$testServerUrl = getenv('TEST_SERVER_URL'); $testServerUrl = getenv('TEST_SERVER_URL');
@ -75,15 +76,33 @@ class FeatureContext extends BehatContext {
return $extractedElementsArray; return $extractedElementsArray;
} }
/**
* Parses the xml answer to get the array of subadmins returned.
*/
public function getArrayOfSubadminsResponded($resp) {
$listCheckedElements = $resp->xml()->data[0]->element;
$extractedElementsArray = json_decode(json_encode($listCheckedElements), 1);
return $extractedElementsArray;
}
/**
* This function is needed to use a vertical fashion in the gherkin tables.
*/
public function simplifyArray($arrayOfArrays){
$a = array_map(function($subArray) { return $subArray[0]; }, $arrayOfArrays);
return $a;
}
/** /**
* @Then /^users returned are$/ * @Then /^users returned are$/
* @param \Behat\Gherkin\Node\TableNode|null $formData * @param \Behat\Gherkin\Node\TableNode|null $formData
*/ */
public function theUsersShouldBe($usersList) { public function theUsersShouldBe($usersList) {
if ($usersList instanceof \Behat\Gherkin\Node\TableNode) { if ($usersList instanceof \Behat\Gherkin\Node\TableNode) {
$users = $usersList->getRows()[0]; $users = $usersList->getRows();
$usersSimplified = $this->simplifyArray($users);
$respondedArray = $this->getArrayOfUsersResponded($this->response); $respondedArray = $this->getArrayOfUsersResponded($this->response);
PHPUnit_Framework_Assert::assertEquals(asort($users), asort($respondedArray)); PHPUnit_Framework_Assert::assertEquals($usersSimplified, $respondedArray, "", 0.0, 10, true);
} }
} }
@ -94,13 +113,36 @@ class FeatureContext extends BehatContext {
*/ */
public function theGroupsShouldBe($groupsList) { public function theGroupsShouldBe($groupsList) {
if ($groupsList instanceof \Behat\Gherkin\Node\TableNode) { if ($groupsList instanceof \Behat\Gherkin\Node\TableNode) {
$groups = $groupsList->getRows()[0]; $groups = $groupsList->getRows();
$groupsSimplified = $this->simplifyArray($groups);
$respondedArray = $this->getArrayOfGroupsResponded($this->response); $respondedArray = $this->getArrayOfGroupsResponded($this->response);
PHPUnit_Framework_Assert::assertEquals(asort($groups), asort($respondedArray)); PHPUnit_Framework_Assert::assertEquals($groupsSimplified, $respondedArray, "", 0.0, 10, true);
} }
} }
/**
* @Then /^subadmin groups returned are$/
* @param \Behat\Gherkin\Node\TableNode|null $formData
*/
public function theSubadminGroupsShouldBe($groupsList) {
if ($groupsList instanceof \Behat\Gherkin\Node\TableNode) {
$groups = $groupsList->getRows();
$groupsSimplified = $this->simplifyArray($groups);
$respondedArray = $this->getArrayOfSubadminsResponded($this->response);
PHPUnit_Framework_Assert::assertEquals($groupsSimplified, $respondedArray, "", 0.0, 10, true);
}
}
/**
* @Then /^subadmin users returned are$/
* @param \Behat\Gherkin\Node\TableNode|null $formData
*/
public function theSubadminUsersShouldBe($groupsList) {
$this->theSubadminGroupsShouldBe($groupsList);
}
/** /**
* @Then /^the OCS status code should be "([^"]*)"$/ * @Then /^the OCS status code should be "([^"]*)"$/
*/ */
@ -144,6 +186,82 @@ class FeatureContext extends BehatContext {
PHPUnit_Framework_Assert::assertEquals(200, $this->response->getStatusCode()); PHPUnit_Framework_Assert::assertEquals(200, $this->response->getStatusCode());
} }
/**
* @Given /^user "([^"]*)" belongs to group "([^"]*)"$/
*/
public function userBelongsToGroup($user, $group) {
$fullUrl = $this->baseUrl . "v2.php/cloud/users/$user/groups";
$client = new Client();
$options = [];
if ($this->currentUser === 'admin') {
$options['auth'] = $this->adminUser;
}
$this->response = $client->get($fullUrl, $options);
$groups = array($group);
$respondedArray = $this->getArrayOfGroupsResponded($this->response);
PHPUnit_Framework_Assert::assertEquals($groups, $respondedArray, "", 0.0, 10, true);
PHPUnit_Framework_Assert::assertEquals(200, $this->response->getStatusCode());
}
/**
* @Given /^user "([^"]*)" does not belong to group "([^"]*)"$/
*/
public function userDoesNotBelongToGroup($user, $group) {
$fullUrl = $this->baseUrl . "v2.php/cloud/users/$user/groups";
$client = new Client();
$options = [];
if ($this->currentUser === 'admin') {
$options['auth'] = $this->adminUser;
}
$this->response = $client->get($fullUrl, $options);
$groups = array($group);
$respondedArray = $this->getArrayOfGroupsResponded($this->response);
PHPUnit_Framework_Assert::assertNotEquals($groups, $respondedArray, "", 0.0, 10, true);
PHPUnit_Framework_Assert::assertEquals(200, $this->response->getStatusCode());
}
/**
* @Given /^user "([^"]*)" is subadmin of group "([^"]*)"$/
*/
public function userIsSubadminOfGroup($user, $group) {
$fullUrl = $this->baseUrl . "v2.php/cloud/groups/$group/subadmins";
$client = new Client();
$options = [];
if ($this->currentUser === 'admin') {
$options['auth'] = $this->adminUser;
}
$this->response = $client->get($fullUrl, $options);
$subadmins = array($user);
$respondedArray = $this->getArrayOfSubadminsResponded($this->response);
sort($respondedArray);
PHPUnit_Framework_Assert::assertContains($user, $respondedArray);
PHPUnit_Framework_Assert::assertEquals(200, $this->response->getStatusCode());
}
/**
* @Given /^user "([^"]*)" is not a subadmin of group "([^"]*)"$/
*/
public function userIsNotSubadminOfGroup($user, $group) {
$fullUrl = $this->baseUrl . "v2.php/cloud/groups/$group/subadmins";
$client = new Client();
$options = [];
if ($this->currentUser === 'admin') {
$options['auth'] = $this->adminUser;
}
$this->response = $client->get($fullUrl, $options);
$subadmins = array($user);
$respondedArray = $this->getArrayOfSubadminsResponded($this->response);
sort($respondedArray);
PHPUnit_Framework_Assert::assertNotContains($user, $respondedArray);
PHPUnit_Framework_Assert::assertEquals(200, $this->response->getStatusCode());
}
/** /**
* @Given /^user "([^"]*)" does not exist$/ * @Given /^user "([^"]*)" does not exist$/
*/ */
@ -233,6 +351,8 @@ class FeatureContext extends BehatContext {
$options = []; $options = [];
if ($this->currentUser === 'admin') { if ($this->currentUser === 'admin') {
$options['auth'] = $this->adminUser; $options['auth'] = $this->adminUser;
} else {
$options['auth'] = $this->regularUser;
} }
if ($body instanceof \Behat\Gherkin\Node\TableNode) { if ($body instanceof \Behat\Gherkin\Node\TableNode) {
$fd = $body->getRowsHash(); $fd = $body->getRowsHash();

View File

@ -1,106 +1,240 @@
Feature: provisioning Feature: provisioning
Background: Background:
Given using api version "1" Given using api version "1"
Scenario: Getting an not existing user Scenario: Getting an not existing user
Given As an "admin" Given As an "admin"
When sending "GET" to "/cloud/users/test" When sending "GET" to "/cloud/users/test"
Then the OCS status code should be "998" Then the OCS status code should be "998"
And the HTTP status code should be "200" And the HTTP status code should be "200"
Scenario: Listing all users Scenario: Listing all users
Given As an "admin" Given As an "admin"
When sending "GET" to "/cloud/users" When sending "GET" to "/cloud/users"
Then the OCS status code should be "100" Then the OCS status code should be "100"
And the HTTP status code should be "200" And the HTTP status code should be "200"
Scenario: Create a user Scenario: Create a user
Given As an "admin" Given As an "admin"
And user "brand-new-user" does not exist And user "brand-new-user" does not exist
When sending "POST" to "/cloud/users" with When sending "POST" to "/cloud/users" with
| userid | brand-new-user | | userid | brand-new-user |
| password | 123456 | | password | 123456 |
Then the OCS status code should be "100" Then the OCS status code should be "100"
And the HTTP status code should be "200" And the HTTP status code should be "200"
And user "brand-new-user" exists And user "brand-new-user" exists
Scenario: Create an existing user Scenario: Create an existing user
Given As an "admin" Given As an "admin"
And user "brand-new-user" exists And user "brand-new-user" exists
When sending "POST" to "/cloud/users" with When sending "POST" to "/cloud/users" with
| userid | brand-new-user | | userid | brand-new-user |
| password | 123456 | | password | 123456 |
Then the OCS status code should be "102" Then the OCS status code should be "102"
And the HTTP status code should be "200" And the HTTP status code should be "200"
Scenario: Get an existing user Scenario: Get an existing user
Given As an "admin" Given As an "admin"
When sending "GET" to "/cloud/users/brand-new-user" When sending "GET" to "/cloud/users/brand-new-user"
Then the OCS status code should be "100" Then the OCS status code should be "100"
And the HTTP status code should be "200" And the HTTP status code should be "200"
Scenario: Getting all users
Given As an "admin"
And user "brand-new-user" exists
And user "admin" exists
When sending "GET" to "/cloud/users"
Then users returned are
| brand-new-user |
| admin |
Scenario: Getting all users Scenario: Edit a user
Given As an "admin" Given As an "admin"
And user "brand-new-user" exists And user "brand-new-user" exists
And user "admin" exists When sending "PUT" to "/cloud/users/brand-new-user" with
When sending "GET" to "/cloud/users" | key | quota |
And users returned are | value | 12MB |
| brand-new-user | | key | email |
| admin | | value | brand-new-user@gmail.com |
Then the OCS status code should be "100"
And the HTTP status code should be "200"
And user "brand-new-user" exists
Scenario: Create a group
Given As an "admin"
And group "new-group" does not exist
When sending "POST" to "/cloud/groups" with
| groupid | new-group |
| password | 123456 |
Then the OCS status code should be "100"
And the HTTP status code should be "200"
And group "new-group" exists
Scenario: Edit a user Scenario: adding user to a group without sending the group
Given As an "admin" Given As an "admin"
And user "brand-new-user" exists And user "brand-new-user" exists
When sending "PUT" to "/cloud/users/brand-new-user" with When sending "POST" to "/cloud/users/brand-new-user/groups" with
| key | quota | | groupid | |
| value | 12MB | Then the OCS status code should be "101"
| key | email | And the HTTP status code should be "200"
| value | brand-new-user@gmail.com |
Then the OCS status code should be "100"
And the HTTP status code should be "200"
And user "brand-new-user" exists
Scenario: adding user to a group which doesn't exist
Given As an "admin"
And user "brand-new-user" exists
And group "not-group" does not exist
When sending "POST" to "/cloud/users/brand-new-user/groups" with
| groupid | not-group |
Then the OCS status code should be "102"
And the HTTP status code should be "200"
Scenario: Delete a user Scenario: adding user to a group without privileges
Given As an "admin" Given As an "brand-new-user"
And user "brand-new-user" exists When sending "POST" to "/cloud/users/brand-new-user/groups" with
When sending "DELETE" to "/cloud/users/brand-new-user" | groupid | new-group |
Then the OCS status code should be "100" Then the OCS status code should be "997"
And the HTTP status code should be "200" And the HTTP status code should be "401"
And user "brand-new-user" does not exist
Scenario: adding user to a group
Given As an "admin"
And user "brand-new-user" exists
And group "new-group" exists
When sending "POST" to "/cloud/users/brand-new-user/groups" with
| groupid | new-group |
Then the OCS status code should be "100"
And the HTTP status code should be "200"
Scenario: Create a group Scenario: getting groups of an user
Given As an "admin" Given As an "admin"
And group "new-group" does not exist And user "brand-new-user" exists
When sending "POST" to "/cloud/groups" with And group "new-group" exists
| groupid | new-group | When sending "GET" to "/cloud/users/brand-new-user/groups"
| password | 123456 | Then groups returned are
| new-group |
And the OCS status code should be "100"
Then the OCS status code should be "100" Scenario: removing a user from a group
And the HTTP status code should be "200" Given As an "admin"
And group "new-group" exists And user "brand-new-user" exists
And group "new-group" exists
And user "brand-new-user" belongs to group "new-group"
When sending "DELETE" to "/cloud/users/brand-new-user/groups" with
| groupid | new-group |
Then the OCS status code should be "100"
And user "brand-new-user" does not belong to group "new-group"
Scenario: adding a user which doesn't exist to a group
Given As an "admin"
And user "not-user" does not exist
And group "new-group" exists
When sending "POST" to "/cloud/users/not-user/groups" with
| groupid | new-group |
Then the OCS status code should be "103"
And the HTTP status code should be "200"
Scenario: Getting all groups Scenario: getting a group
Given As an "admin" Given As an "admin"
And group "new-group" exists And group "new-group" exists
And group "admin" exists When sending "GET" to "/cloud/groups/new-group"
When sending "GET" to "/cloud/groups" Then the OCS status code should be "100"
And groups returned are And the HTTP status code should be "200"
| admin |
| new-group |
Scenario: Getting all groups
Given As an "admin"
And group "new-group" exists
And group "admin" exists
When sending "GET" to "/cloud/groups"
Then groups returned are
| admin |
| new-group |
Scenario: Delete a group Scenario: create a subadmin
Given As an "admin" Given As an "admin"
And group "new-group" exists And user "brand-new-user" exists
When sending "DELETE" to "/cloud/groups/new-group" And group "new-group" exists
Then the OCS status code should be "100" When sending "POST" to "/cloud/users/brand-new-user/subadmins" with
And the HTTP status code should be "200" | groupid | new-group |
And group "new-group" does not exist Then the OCS status code should be "100"
And the HTTP status code should be "200"
Scenario: create a subadmin using a user which not exist
Given As an "admin"
And user "not-user" does not exist
And group "new-group" exists
When sending "POST" to "/cloud/users/not-user/subadmins" with
| groupid | new-group |
Then the OCS status code should be "101"
And the HTTP status code should be "200"
Scenario: create a subadmin using a group which not exist
Given As an "admin"
And user "brand-new-user" exists
And group "not-group" does not exist
When sending "POST" to "/cloud/users/brand-new-user/subadmins" with
| groupid | not-group |
Then the OCS status code should be "102"
And the HTTP status code should be "200"
Scenario: Getting subadmin groups
Given As an "admin"
And user "brand-new-user" exists
And group "new-group" exists
When sending "GET" to "/cloud/users/brand-new-user/subadmins"
Then subadmin groups returned are
| new-group |
Then the OCS status code should be "100"
And the HTTP status code should be "200"
Scenario: Getting subadmin groups of a user which not exist
Given As an "admin"
And user "not-user" does not exist
And group "new-group" exists
When sending "GET" to "/cloud/users/not-user/subadmins"
Then the OCS status code should be "101"
And the HTTP status code should be "200"
Scenario: Getting subadmin users of a group
Given As an "admin"
And user "brand-new-user" exists
And group "new-group" exists
When sending "GET" to "/cloud/groups/new-group/subadmins"
Then subadmin users returned are
| brand-new-user |
And the OCS status code should be "100"
And the HTTP status code should be "200"
Scenario: Getting subadmin users of a group which doesn't exist
Given As an "admin"
And user "brand-new-user" exists
And group "not-group" does not exist
When sending "GET" to "/cloud/groups/not-group/subadmins"
Then the OCS status code should be "101"
And the HTTP status code should be "200"
Scenario: Removing subadmin from a group
Given As an "admin"
And user "brand-new-user" exists
And group "new-group" exists
And user "brand-new-user" is subadmin of group "new-group"
When sending "DELETE" to "/cloud/users/brand-new-user/subadmins" with
| groupid | new-group |
And the OCS status code should be "100"
And the HTTP status code should be "200"
Scenario: Delete a user
Given As an "admin"
And user "brand-new-user" exists
When sending "DELETE" to "/cloud/users/brand-new-user"
Then the OCS status code should be "100"
And the HTTP status code should be "200"
And user "brand-new-user" does not exist
Scenario: Delete a group
Given As an "admin"
And group "new-group" exists
When sending "DELETE" to "/cloud/groups/new-group"
Then the OCS status code should be "100"
And the HTTP status code should be "200"
And group "new-group" does not exist