diff options
author | Lars Wirzenius <liw@liw.fi> | 2019-04-29 14:01:10 +0300 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2019-04-29 14:01:10 +0300 |
commit | 315fbae5532c1a0bddac82b927e936e3f666ade0 (patch) | |
tree | 3bcb7a31ac63efa573540ff51ca940cb1318218e /muck2.yarn | |
download | saga-poc-315fbae5532c1a0bddac82b927e936e3f666ade0.tar.gz |
Add: muck1 and muck2 prototypes
Diffstat (limited to 'muck2.yarn')
-rw-r--r-- | muck2.yarn | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/muck2.yarn b/muck2.yarn new file mode 100644 index 0000000..c622a2f --- /dev/null +++ b/muck2.yarn @@ -0,0 +1,106 @@ +--- +title: Muck acceptance tests v2 +author: Lars Wirzenius / The Ick project +... + +Introduction +============================================================================= + +Muck is a persistent in-memory JSON store with an HTTP API and +advanced access control using signed JWT access tokens. This document +presents its automated acceptance tests, using a (for now +hypothetical) language similar to the Gherkin langauge implemented by +Cucumber. + +A happy path scenario +============================================================================= + +This scenario does some basic resource management via the Muck API. + +Start Muck. This also sets up access to it for the user by getting an +access token, which will be used for all requests. + +> **given** a running Muck + +Check server status. + +> **then** there are _0_ resources in Muck + +Create a simple resource. Remember its id. + +> **given** I am _tomjon_ +> **when** I create a resource `{"foo": "bar"}` +> **then** there is _1_ resource in Muck +> **and** resource id is remembered as _ID_ +> **and** resource revision is remembered as _REV1_ + +Retrieve the resource. + +> **when** I fetch resource _ID_ +> **then** I get `{"foo": "bar"}` +> **and** it is mine +> **and** it has revision _REV1_ + +Make sure another user can't retreive, update, or delete the resource. + +> **given** I am _verence_ +> **when** I fetch resource _ID_ +> **then** it doesn't exist +> +> **when** I update _ID_, revision _REV1_, with `{"foo": "somethingelse"}` +> **then** it doesn't exist +> +> **when** I delete _ID_ +> **then** it doesn't exist + +Update the resource. + +> **given** I am _tomjon_ +> **when** I update _ID_, revision _wrong_, with `{"foo": "somethingelse"}` +> **then** it doesnt't work +> +> **when** I update _ID_, revision _REV1_, with `{"foo": "somethingelse"}` +> **then** it works +> **and** resource revision is remembered as _REV2_ + +Check the resource has been updated. + +> **when** I fetch resource _ID_ +> **then** I get `{"foo": "somethingelse"}` +> **and** it is mine +> **and** it has revision _REV2_ + +Restart Muck. The resource should still exist. + +> **when** Muck is restarted +> **and** I fetch resource _ID_ +> **then** I get `{"foo": "somethingelse"}` +> **and** it is mine +> **and** it has revision _REV2_ + +Search for the resource. First with a condition that is no longer +true. + +> **when** I search for _foo_ being _bar_ +> **then** there are no matches + +Now search for the correct value. + +> **when** I search for _foo_ being _somethingelse_ +> **then** I get only resource _ID_ + +Delete the resource. + +> **when** I delete _ID_ +> **then** it works + +> **when** I fetch resource _ID_ +> **then** it doesn't exist + +Restart Muck again. The resource should not exist. + +> **when** Muck is restarted +> **when** I fetch resource _ID_ +> **then** it doesn't exist + +All done. |