--- title: Muck acceptance tests v3 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.