--- 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** remember the resource id as _ID_ > **and** rememer the resource revision 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** remember the resource revision 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.