blob: c622a2f7083f3a704e4cf3427dd54a9656a7d8d8 (
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** 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.
|