summaryrefslogtreecommitdiff
path: root/muck2.yarn
blob: fe4668472d7c73ea77cdb5fe6596d3c11950bfa9 (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 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.