1
1
import pytest
2
+ import datetime as dt
3
+
2
4
from edpop_explorer import Record , EDPOPREC , BibliographicalRecord , Field
3
- from rdflib import Graph , RDF , URIRef
5
+ from rdflib import Graph , RDF , URIRef , Literal
4
6
5
7
from .graphs_test import MockReader
6
- from .triplestore import save_to_triplestore , remove_from_triplestore , SCHEMA
8
+ from .triplestore import collect_garbage , save_to_triplestore , \
9
+ remove_from_triplestore , SCHEMA , RECORDS_GC_GRAPH_IDENTIFIER
7
10
from operator import attrgetter
8
11
9
12
@@ -29,6 +32,14 @@ def record_nodes(record_instances):
29
32
return map (attrgetter ('subject_node' ), record_instances )
30
33
31
34
35
+ @pytest .fixture
36
+ def working_data_saved (working_data_graph , triplestore ):
37
+ records , graph = working_data_graph
38
+ nodes = list (record_nodes (records ))
39
+ save_to_triplestore (graph , nodes )
40
+ return nodes , records , graph
41
+
42
+
32
43
def stored_records (triplestore ):
33
44
""" Retrieve the records currently stored in `triplestore`. """
34
45
return list (triplestore .subjects (RDF .type , EDPOPREC .Record ))
@@ -85,3 +96,50 @@ def test_remove_nonexistent_subject(working_data_graph):
85
96
# Removing subjects that don't exist should not cause any problems
86
97
records , _ = working_data_graph
87
98
remove_from_triplestore (records )
99
+
100
+
101
+ def test_gc_retain_recent (working_data_saved , triplestore ):
102
+ cutoff = dt .date .today () - dt .timedelta (weeks = 1 )
103
+ collect_garbage (cutoff )
104
+ assert len (stored_records (triplestore )) == 2
105
+ assert stored_records_match_tracked_records (triplestore )
106
+
107
+
108
+ def test_gc_remove_outdated (working_data_saved , triplestore ):
109
+ cutoff = dt .date .today () + dt .timedelta (weeks = 1 )
110
+ collect_garbage (cutoff )
111
+ assert len (stored_records (triplestore )) == 0
112
+ assert stored_records_match_tracked_records (triplestore )
113
+
114
+
115
+ def test_gc_retain_used (working_data_saved , triplestore ):
116
+ cutoff = dt .date .today () + dt .timedelta (weeks = 1 )
117
+ nodes , _ , _ = working_data_saved
118
+ chosen = nodes [0 ]
119
+ triplestore .addN ([(
120
+ chosen ,
121
+ SCHEMA .upvoteCount ,
122
+ Literal (1 ),
123
+ Graph (identifier = RECORDS_GC_GRAPH_IDENTIFIER ),
124
+ )])
125
+ collect_garbage (cutoff )
126
+ remaining_subjects = stored_records (triplestore )
127
+ assert len (remaining_subjects ) == 1
128
+ assert remaining_subjects [0 ] == chosen
129
+ assert stored_records_match_tracked_records (triplestore )
130
+
131
+
132
+ def test_gc_remove_obsolete (working_data_saved , triplestore ):
133
+ cutoff = dt .date .today () + dt .timedelta (weeks = 1 )
134
+ nodes , _ , _ = working_data_saved
135
+ chosen = nodes [0 ]
136
+ triplestore .addN ([(
137
+ chosen ,
138
+ SCHEMA .upvoteCount ,
139
+ Literal (0 ),
140
+ Graph (identifier = RECORDS_GC_GRAPH_IDENTIFIER ),
141
+ )])
142
+ collect_garbage (cutoff )
143
+ remaining_subjects = stored_records (triplestore )
144
+ assert len (remaining_subjects ) == 0
145
+ assert stored_records_match_tracked_records (triplestore )
0 commit comments