|
1 | 1 | /* eslint-env jest */ |
2 | 2 | import $rdf from 'rdflib' |
3 | | -import { getInitialisationStatements, getSetContentsStatements, getContents, isPad, getTitle } from './data' |
| 3 | +import { getInitialisationStatements, getSetContentsStatements, getContents, isPad, getTitle, getLatestAuthor } from './data' |
4 | 4 | import vocab from 'solid-namespace' |
5 | 5 |
|
6 | 6 | const ns = vocab($rdf) |
@@ -119,6 +119,67 @@ Second line` |
119 | 119 | }) |
120 | 120 | }) |
121 | 121 |
|
| 122 | +describe('getLatestAuthor()', () => { |
| 123 | + it('should be able to get the latest author', async () => { |
| 124 | + const mockStore = $rdf.graph() |
| 125 | + const mockPad = $rdf.sym('https://mock-pad') |
| 126 | + const mockEarlyAuthor = $rdf.sym('https:/mock-early-author') |
| 127 | + const mockLateAuthor = $rdf.sym('https:/mock-late-author') |
| 128 | + |
| 129 | + const mockFirstLine = $rdf.sym('https://arbitrary-line-1') |
| 130 | + mockStore.add(mockPad, ns.pad('next'), mockFirstLine, mockPad.doc()) |
| 131 | + mockStore.add(mockFirstLine, ns.sioc('content'), 'First line', mockPad.doc()) |
| 132 | + mockStore.add(mockFirstLine, ns.dc('created'), new Date(0), mockPad.doc()) |
| 133 | + mockStore.add(mockFirstLine, ns.dc('author'), mockEarlyAuthor, mockPad.doc()) |
| 134 | + const mockSecondLine = $rdf.sym('https://arbitrary-line-2') |
| 135 | + mockStore.add(mockFirstLine, ns.pad('next'), mockSecondLine, mockPad.doc()) |
| 136 | + mockStore.add(mockSecondLine, ns.sioc('content'), 'Second line', mockPad.doc()) |
| 137 | + mockStore.add(mockSecondLine, ns.dc('created'), new Date(24 * 60 * 60 * 1000), mockPad.doc()) |
| 138 | + mockStore.add(mockSecondLine, ns.dc('author'), mockLateAuthor, mockPad.doc()) |
| 139 | + mockStore.add(mockSecondLine, ns.pad('next'), mockPad, mockPad.doc()) |
| 140 | + |
| 141 | + expect(getLatestAuthor(mockStore, mockPad)).toEqual(mockLateAuthor) |
| 142 | + }) |
| 143 | + |
| 144 | + it('should return an author even when all lines were authored at the same time', async () => { |
| 145 | + const mockStore = $rdf.graph() |
| 146 | + const mockPad = $rdf.sym('https://mock-pad') |
| 147 | + const mockEarlyAuthor = $rdf.sym('https:/mock-early-author') |
| 148 | + const mockLateAuthor = $rdf.sym('https:/mock-late-author') |
| 149 | + |
| 150 | + const mockFirstLine = $rdf.sym('https://arbitrary-line-1') |
| 151 | + mockStore.add(mockPad, ns.pad('next'), mockFirstLine, mockPad.doc()) |
| 152 | + mockStore.add(mockFirstLine, ns.sioc('content'), 'First line', mockPad.doc()) |
| 153 | + mockStore.add(mockFirstLine, ns.dc('created'), new Date(0), mockPad.doc()) |
| 154 | + mockStore.add(mockFirstLine, ns.dc('author'), mockEarlyAuthor, mockPad.doc()) |
| 155 | + const mockSecondLine = $rdf.sym('https://arbitrary-line-2') |
| 156 | + mockStore.add(mockFirstLine, ns.pad('next'), mockSecondLine, mockPad.doc()) |
| 157 | + mockStore.add(mockSecondLine, ns.sioc('content'), 'Second line', mockPad.doc()) |
| 158 | + mockStore.add(mockSecondLine, ns.dc('created'), new Date(0), mockPad.doc()) |
| 159 | + mockStore.add(mockSecondLine, ns.dc('author'), mockLateAuthor, mockPad.doc()) |
| 160 | + mockStore.add(mockSecondLine, ns.pad('next'), mockPad, mockPad.doc()) |
| 161 | + |
| 162 | + expect(getLatestAuthor(mockStore, mockPad)).not.toBeNull() |
| 163 | + }) |
| 164 | + |
| 165 | + it('should return null if no author data is present', async () => { |
| 166 | + const mockStore = $rdf.graph() |
| 167 | + const mockPad = $rdf.sym('https://mock-pad') |
| 168 | + |
| 169 | + const mockFirstLine = $rdf.sym('https://arbitrary-line-1') |
| 170 | + mockStore.add(mockPad, ns.pad('next'), mockFirstLine, mockPad.doc()) |
| 171 | + mockStore.add(mockFirstLine, ns.sioc('content'), 'First line', mockPad.doc()) |
| 172 | + mockStore.add(mockFirstLine, ns.dc('created'), new Date(0), mockPad.doc()) |
| 173 | + const mockSecondLine = $rdf.sym('https://arbitrary-line-2') |
| 174 | + mockStore.add(mockFirstLine, ns.pad('next'), mockSecondLine, mockPad.doc()) |
| 175 | + mockStore.add(mockSecondLine, ns.sioc('content'), 'Second line', mockPad.doc()) |
| 176 | + mockStore.add(mockSecondLine, ns.dc('created'), new Date(0), mockPad.doc()) |
| 177 | + mockStore.add(mockSecondLine, ns.pad('next'), mockPad, mockPad.doc()) |
| 178 | + |
| 179 | + expect(getLatestAuthor(mockStore, mockPad)).toBeNull() |
| 180 | + }) |
| 181 | +}) |
| 182 | + |
122 | 183 | describe('getTitle()', () => { |
123 | 184 | it('should return a document\'s title', async () => { |
124 | 185 | const mockStore = $rdf.graph() |
|
0 commit comments