summaryrefslogtreecommitdiff
path: root/clab.md
blob: 2be29f6a0a0e40323e8808c835086eb8a008e9c5 (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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
---
title: "clab; – command line address book"
author: Lars Wirzenius
template: python
bindings:
- subplot/clab.yaml
- lib/files.yaml
- lib/runcmd.yaml
functions:
- subplot/clab.py
- lib/files.py
- lib/runcmd.py
...

# Introduction

`clab` is a command line address book application. It has no
interactive features. This document collects its acceptance criteria.

# Empty database

~~~scenario
given an installed clab
when I run clab lint
then command is successful

when I run clab search Alice
then command is successful
then stdout is exactly ""

when I try to run clab mutt-query Alice
then command fails
~~~

# Alice and Bob

Next, let's add records for Alice and Bob, and make
sure searches find only the right records.


~~~scenario
given an installed clab

given file .local/share/clab/address-book.yaml from address-book.yaml

when I run clab lint
then command is successful

when I run clab list
then command is successful
then stdout is valid YAML
then stdout contains "Alice Atherthon"
then stdout contains "Bob Bobbington"

when I run clab search Alice
then command is successful
then stdout is valid YAML
then stdout contains "Alice Atherthon"
then stdout doesn't contain "Bob"

when I run clab mutt-query Alice
then command is successful
then stdout is exactly "clab found matches:\nalice@example.com\tAlice Atherthon\n"
~~~

~~~{#address-book.yaml .file .yaml}
- name: Alice Atherthon
  email:
    work: alice@example.com
  tags: [co-worker]
  last_checked: 2021-09
- name: Bob Bobbington
  email:
    personal: bob@example.com
  last_checked: 2021-09
~~~

~~~{#address-book-reformatted .file .yaml}
---
- name: Alice Atherthon
  email:
    work: alice@example.com
  tags:
    - co-worker
  last_checked: 2021-09
- name: Bob Bobbington
  email:
    personal: bob@example.com
  last_checked: 2021-09
~~~


# Search by tag

This scenario verifies that `clab` can find entries based on tags.

~~~scenario
given an installed clab
given file .local/share/clab/address-book.yaml from address-book.yaml

when I run clab tagged co-worker
then command is successful
then stdout contains "Alice Atherthon"
then stdout doesn't contain "Bob"
~~~

# Full text search

This scenario verifies that `clab` does a full text search.

~~~scenario
given an installed clab
given file .local/share/clab/address-book.yaml from address-book.yaml

when I run clab search example
then command is successful
then stdout contains "Alice Atherthon"
then stdout contains "Bob"

when I run clab search email
then command is successful
then stdout contains "Alice Atherthon"
then stdout contains "Bob"
~~~

# Reformat address book

This scenario verifies that `clab` can reformat the address book in
place.

~~~scenario
given an installed clab
given file .local/share/clab/address-book.yaml from address-book.yaml
given file reformatted.yaml from address-book-reformatted

when I run clab reformat
then command is successful
then files .local/share/clab/address-book.yaml and reformatted.yaml match
~~~