diff --git a/features/resources/_index.md b/features/resources/_index.md index 01c90eb..3eedc34 100644 --- a/features/resources/_index.md +++ b/features/resources/_index.md @@ -9,6 +9,30 @@ geekdocFilePath: _index.md ## Requirements +### Accessing a resource as a collaborator + +{{< include file="features/resources/accessing_a_resource_as_a_collaborator.feature" language="gherkin" >}} + +### Being added/removed as a collaborator to/from a resource + +{{< include file="features/resources/being_added_removed_as_a_collaborator_to_from_a_resource.feature" language="gherkin" >}} + +### Pending Shares + +- As a user I don't want that resources I'm added as a collaborator to are directly available in my hierarchy and for sync for that I can decide whether I need them or not. +- As a user I want that resources I'm added as a collaborator to are directly available in my hierarchy and for sync for that I can directly work with them without requiring any interaction. + +{{< include file="features/resources/pending_shares.feature" language="gherkin" >}} + +### Overview of received shared resources + +- As a user I only want to view the resources that I'm a collaborator of to separate other users' files from mine as well as to add or remove them to/from my personal space. +- As a user I want to get a list of collaborator invitations that I didn't yet decide upon ("Pending Shares") to be able to add a resource to my personal space after dismissing the invitation notification or to re-add a resource I previously removed from my personal space. +- As a user it helps me to list shares with state "Pending" first by default as these are usually the most actionable ones. +- As a user I want to remove a shared resource from my personal space if I do no longer need it or accidentally accepted it in order to move it out of sight and to keep my account clean. The resource should stay shared with me but in a declined state. I don't want to inform the owner of the resource about it because I can restore access to the resource at any time by adding it again. + +{{< include file="features/resources/overview_of_received_shared_resources.feature" language="gherkin" >}} + ### Accessing a resource via a link {{< include file="features/resources/accessing_a_resource_via_link.feature" language="gherkin" >}} diff --git a/features/resources/accessing_a_resource_as_a_collaborator.feature b/features/resources/accessing_a_resource_as_a_collaborator.feature new file mode 100644 index 0000000..125d42e --- /dev/null +++ b/features/resources/accessing_a_resource_as_a_collaborator.feature @@ -0,0 +1,70 @@ +Feature: Accessing a resource as a collaborator + +Scenario: Accessing a resource as a collaborator with the 'Viewer' role + Given I'm a logged in user who is a collaborator of a resource + And I have the role 'Viewer' +# And I have added the resource to my personal space as in 'Feature: Overview of received shared resources' / 'Feature: Pending Shares' + When accessing this resource + Then I can list the resource and its contents + And I can download the resource and its contents + And I can view the resource and its contents as in 'Feature: Accessing a resource' + And I can rename the resource as in 'Scenario: Renaming a shared resource in a user's personal space' + And I can move the resource as in 'Scenario: Moving a shared resource within a user's personal space' + And I can remove the resource from my personal space as in 'Feature: Removing a shared resource from a user's personal space' + +Scenario: Accessing a resource as a collaborator with the 'Editor' role + Given I'm a logged in user who is a collaborator of a resource + And I have the role 'Editor' +# And I have added the resource to my personal space as in 'Feature: Overview of received shared resources' / 'Feature: Pending Shares' + When accessing this resource + Then I can list the resource and its contents + And I can download the resource and its contents + And I can view the resource and its contents as in 'Feature: Accessing a resource' + And I can rename the resource as in 'Scenario: Renaming a shared resource in a user's personal space' + And I can move the resource as in 'Scenario: Moving a shared resource within a user's personal space' + And I can remove the resource from my personal space as in 'Feature: Removing a shared resource from a user's personal space' + And I can rename the contents of the resource as in 'Feature: Renaming a resource' + And I can delete the contents of the resource as in 'Feature: Deleting a resource' + And I can move the contents of the resource as in 'Feature: Moving a resource' + And I can move resources into the resource as in 'Feature: Moving a resource' + And I can move resources out of the resource as in 'Feature: Moving a resource' + And I can create resources within the resource as in 'Feature: Creating a resource' + And I can upload resources into the resource as in 'Feature: Uploading a resource' + And I can edit/change/update the resource and its contents + +Scenario: Accessing a resource as a collaborator with the 'Advanced permissions' role + Given I'm a logged in user who is a collaborator of a resource + And I have the role 'Advanced permissions' +# And I have added the resource to my personal space as in 'Feature: Overview of received shared resources' / 'Feature: Pending Shares' + When accessing this resource + Then I can list the resource and its contents + And I can download the resource and its contents + And I can view the resource and its contents as in 'Feature: Accessing a resource' + And I can rename the resource as in 'Scenario: Renaming a shared resource in a user's personal space' + And I can move the resource as in 'Scenario: Moving a shared resource within a user's personal space' + And I can remove the resource from my personal space as in 'Feature: Removing a shared resource from a user's personal space' + And I can use the resource based on the additionally granted detailed permissions described below + And the granted detailed permissions can stack/complement each other + + When accessing this resources without any of the detailed permissions + Then the behavior equals 'Scenario: Accessing a resource as a collaborator with the 'Viewer' role' + + When accessing this resource only with the permission "Edit" (single file) + Then I can edit/change/update the resource + + When accessing this resource only with the permission "Create" (folder) + Then I can move resources into the resource as in 'Feature: Moving a resource' + And I can create resources within the resource as in 'Feature: Creating a resource' + And I can upload resources into the resource as in 'Feature: Uploading a resource' + + When accessing this resource only with the permission "Change" (folder) + Then I can rename the contents of the resource as in 'Feature: Renaming a resource' + And I can edit/change/update the resource and its contents + + When accessing this resource only with the permission "Delete" (folder) + Then I can delete the contents of the resource as in 'Feature: Deleting a resource' + And I can move resources out of the resource as in 'Feature: Moving a resource' + + When accessing this resource only with the permission "Manage" + Then I can add collaborators to the resource as in 'Feature: Adding collaborators to a resource' + And I can manage the collaborators of the resource as in 'Feature: Managing collaborators of a resource' diff --git a/features/resources/being_added_removed_as_a_collaborator_to_from_a_resource.feature b/features/resources/being_added_removed_as_a_collaborator_to_from_a_resource.feature new file mode 100644 index 0000000..1dcfb68 --- /dev/null +++ b/features/resources/being_added_removed_as_a_collaborator_to_from_a_resource.feature @@ -0,0 +1,13 @@ +Feature: Being added/removed as a collaborator to/from a resource + +Scenario: Being added as a regular single user + Given I'm a regular ownCloud user of the instance the resource is located on + When I'm added as a collaborator to a resource as in 'Feature: Adding collaborators to a resource' + Then the subsequent behavior is determined by 'Feature: Pending Shares' + +Scenario: Being removed as a collaborator from a resource + Given I'm a collaborator of a certain resource + When I'm removed from the resource as in 'Scenario: Removing a collaborator from a resource' + Then I do not have access to the resource anymore + And the resource disappears from my resource list + And I don't have a way to get back access except asking a collaborator to add me again diff --git a/features/resources/overview_of_received_shared_resources.feature b/features/resources/overview_of_received_shared_resources.feature new file mode 100644 index 0000000..eb3600a --- /dev/null +++ b/features/resources/overview_of_received_shared_resources.feature @@ -0,0 +1,30 @@ +Feature: Overview of received shared resources + +Scenario: Listing received shared resources + Given I'm logged in as a user + When I have collaborator invites (accepted/pending/declined) + Then I can list these resources + And I see the name of the resources + And I see file type icons or thumbnails + And I can recognize the initiator of the invite + And I see the time since the invite has been initiated + And I see the state of the invite (accepted/pending/declined) + And I can add these resources to my personal space as in 'Scenario: Adding a shared resource to a user's personal space' + And I can remove these resources from my personal space as in 'Scenario: Removing a shared resource from a user's personal space' + And I can sort the list (ascending/descending) by name, state and time + +Scenario: Adding a shared resource to a user's personal space + Given I'm a logged in user + When I have pending/declined collaborator invites + Then I can add such a resource to my personal space + And the state of the invite changes to 'accepted' + And the resource is located in the folder configured via the 'share_folder' option + And I can access it as in 'Feature: Accessing a resource as a collaborator' + +Scenario: Removing a shared resource from a user's personal space + Given I'm a logged in user + When I have accepted collaborator invites + Then I can remove such a resource from my personal space + And the state of the invite changes to 'declined' + And the resource is not located in my hierarchy any more + And I can't access it any more diff --git a/features/resources/pending_shares.feature b/features/resources/pending_shares.feature new file mode 100644 index 0000000..992fcc9 --- /dev/null +++ b/features/resources/pending_shares.feature @@ -0,0 +1,16 @@ +Feature: Pending Shares + +Scenario: Being added as a collaborator to a resource (Pending Shares enabled) + Given I'm added as a collaborator to a resource as in 'Feature: Adding collaborators to a resource' +# When the option 'Automatically accept new incoming local user shares' is disabled + Then the resource is not yet located in my file hierarchy +# Then I am notified about the invite and can choose to 'accept' or 'decline' it + And the resource appears in 'Feature: Overview of received shared resources' with state 'Pending' + When I decline the resource +# Then the notification is dismissed + Then the state of the invite changes to 'declined' + When I accept the resource +# Then the notification is dismissed + Then the state of the invite changes to 'accepted' + And the resource is located in the folder configured via the 'share_folder' option + And I can access it as in 'Feature: Accessing a resource as a collaborator' diff --git a/features/sharing/_index.md b/features/sharing/_index.md index 51aa60c..2d5489d 100644 --- a/features/sharing/_index.md +++ b/features/sharing/_index.md @@ -2,7 +2,7 @@ title: Sharing geekdocRepo: https://github.com/owncloud/product geekdocEditPath: edit/master/docs -geekdocFilePath: sharing.md +geekdocFilePath: _index.md --- Sharing. diff --git a/features/sharing/adding_collaborators_to_a_resource.feature b/features/sharing/adding_collaborators_to_a_resource.feature new file mode 100644 index 0000000..51ba3bc --- /dev/null +++ b/features/sharing/adding_collaborators_to_a_resource.feature @@ -0,0 +1,25 @@ +Feature: Adding collaborators to a resource + +Scenario: Finding collaborators + Given I'm a logged in user located in the collaborators panel of a resource + When I start typing in the collaborator search field + Then I see suggestions (with potentially many characters) based on the available user and group identifiers/attributes, sharing restrictions and options for autocomplete results. These are structured in the following way: + - [Avatar] Identifier / name / mail address / federation ID + - Additional information if applicable (e.g. 'Scenario: Extra field to display in autocomplete results') + - Type (User/Group/Guest/Federated) + And the suggestions for guests or federated users only appear once I enter a compliant identifier (e.g., "name@sub.domain.tld") + Then I choose a collaborator + And the chosen collaborator becomes fixed but can easily be removed again + And I can start typing again to add additional collaborators + +Scenario: Setting collaborator properties + Given I'm adding collaborators as in 'Scenario: Finding collaborators' + When having added the first collaborator + Then I can choose a role for the chosen collaborators as in 'Feature: Roles for collaborators' + Then I can set an expiration date for the chosen collaborators as in 'Feature: Expiration date for collaborators' + +Scenario: Confirming collaborators + Given I have set collaborator properties as in 'Scenario: Setting collaborator properties' + When I confirm the supplied information + Then the collaborators are added to the resource according to the specified properties + And I get visual feedback to know whether the action was successful or not diff --git a/features/sharing/collaborators.md b/features/sharing/collaborators.md new file mode 100644 index 0000000..ce9ad16 --- /dev/null +++ b/features/sharing/collaborators.md @@ -0,0 +1,31 @@ +--- +title: Collaborators +geekdocRepo: https://github.com/owncloud/product +geekdocEditPath: edit/master/docs +geekdocFilePath: collaborators.md +--- + +This document describes the features around 'Collaborators' from the perspective of the owner. The perspective of a recipient is described in the section 'Resources'. + +## User stories + +1. Adding single collaborators to a resource (user share) +* Use case: As a user I want to exchange data with internal single users for that they get access and can collaborate with me + +## Requirements + +### Adding collaborators to a resource + +- As an owner or co-owner of a resource I want to be able to add other collaborators to the resource in order to provide access and to enable collaboration on the resource. + +{{< include file="features/sharing/adding_collaborators_to_a_resource.feature" language="gherkin">}} + +### Managing collaborators of a resource + +{{< include file="features/sharing/managing_collaborators_of_a_resource.feature" language="gherkin">}} + +### Roles for collaborators + +- As a regular user adding collaborators to a resource I want to choose roles for collaborators as these are easy to understand and less technical than raw permissions. Still, I need a brief explanation of what the roles exactly stand for in order to prevent mistakes. For legacy reasons and as a power user I still need granular permissions to restrict collaborators to exactly the features I want to allow. + +{{< include file="features/sharing/roles_for_collaborators.feature" language="gherkin">}} diff --git a/features/sharing/managing_collaborators_of_a_resource.feature b/features/sharing/managing_collaborators_of_a_resource.feature new file mode 100644 index 0000000..bb3f876 --- /dev/null +++ b/features/sharing/managing_collaborators_of_a_resource.feature @@ -0,0 +1,54 @@ +Feature: Managing collaborators of a resource + +Scenario: Viewing collaborators of a resource as an Owner + Given I'm a collaborator of a specific resource + And I have the role 'Owner' + When looking at the resource in detail + Then I get a list of all collaborators of the resource separated by users and groups whereby each entry contains the following information + - Name +# - Additional information based on 'Scenario: Extra field to display in autocomplete results' + - Avatar +# - Type (User/Guest/Federated) + - Role +# - State (pending/accepted; for local/federated/guest) +# - Expiration date (if applicable) + - Initiator of a reshare (if applicable) + And the list also contains collaborators of parent resources as static entries + And collaborators of parent resources indicate their origin and allow to jump there ("via") + And I see myself always as the first entry in the list + +Scenario: Viewing collaborators of a resource as a regular collaborator + Given I'm a collaborator of a specific resource + And I don't have the role 'Owner' + When looking at the resource in detail + Then I get a list of all collaborators whom I added to the resource, separated by users and groups whereby each entry contains the following information + - Name +# - Additional information based on 'Scenario: Extra field to display in autocomplete results' + - Avatar +# - Type (User/Guest/Federated) + - Role +# - State (pending/accepted; for local/federated/guest) +# - Expiration date (if applicable) + - Initiator of a reshare (if applicable) + And the list also contains collaborators of parent resources whom I added as static entries + And collaborators of parent resources indicate their origin and allow to jump there ("via") + And I see the Owner of the resource always as the first entry in the list + And I see myself in the list + +Scenario: Removing a collaborator from a resource + Given I'm a collaborator of a specific resource + And I can list other collaborators + When looking at the resource in detail + Then I can remove collaborators from the resource + And I have to confirm the removal + And the collaborator disappears from the list + And the removed users do not have access anymore + +Scenario: Modifying a collaborator of a resource + Given I'm a collaborator of a specific resource + And I can list other collaborators + When looking at the resource in detail + Then I can change each collaborator's role as in 'Feature: Roles for collaborators' + And I can change each collaborator's expiration date as in 'Feature: Expiration date for collaborators' + And I have to confirm the modifications + And the modifications take effect diff --git a/features/sharing/roles_for_collaborators.feature b/features/sharing/roles_for_collaborators.feature new file mode 100644 index 0000000..9659dc8 --- /dev/null +++ b/features/sharing/roles_for_collaborators.feature @@ -0,0 +1,48 @@ +Feature: Roles for collaborators + +- Owner: The physical owner of the resource +#- Co-Owner: Full permissions including managing existing and adding additional collaborators +- Editor: View + Edit permissions +- Viewer: View only +#- Dynamic roles (e.g. Secure Viewer) +- Advanced permissions + - Cover legacy permission combinations + - Offer granular permission sets + +Scenario: Setting roles for collaborators on a single file as an Owner + Given I'm a collaborator of a specific file + And I have the role 'Owner' + When located in 'Scenario: Setting collaborator properties' +# Then I can choose the role 'Co-Owner' +# And I see an explanatory note "Manage collaborators, view, download and edit" + Then I can choose the role 'Editor' + And I see an explanatory note "View, download and edit" + Then I can choose the role 'Viewer' + And I see an explanatory note "View and download" +# Then I can choose dynamic roles like 'Secure Viewer' which are introduced by apps +# And I see an explanatory note defined by the respective app +# When choosing a dynamic role +# Then I can set single sub-permissions like 'Print / Export PDF' defined by the respective app + Then I can choose the role 'Advanced permissions' + And I see an explanatory note "Set detailed permissions" + When choosing the role 'Advanced permissions' + Then I can set single permissions "Manage" and "Edit" + +Scenario: Setting roles for collaborators on a folder as an Owner + Given I'm a collaborator of a specific folder + And I have the role 'Owner' + When located in 'Scenario: Setting collaborator properties' +# Then I can choose the role 'Co-Owner' +# And I see an explanatory note "Manage collaborators, view, download, edit and delete" + Then I can choose the role 'Editor' + And I see an explanatory note "View, download, edit and delete" + Then I can choose the role 'Viewer' + And I see an explanatory note "View and download" +# Then I can choose dynamic roles like 'Secure Viewer' which are introduced by apps +# And I see an explanatory note defined by the respective app +# When choosing a dynamic role +# Then I can set single sub-permissions like 'Print / Export PDF' defined by the respective app + Then I can choose the role 'Advanced permissions' + And I see an explanatory note "Set detailed permissions" + When choosing the role 'Advanced permissions' + Then I can set single permissions "Manage", "Create", "Change", "Delete"