summaryrefslogtreecommitdiff
path: root/muck3.yarn
blob: ca43b512c63135449deada8f2bda5a8db973d93d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
---
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.