@@ -24,40 +24,58 @@ def subparsers():
24
24
return parser .add_subparsers (dest = "subcommand" )
25
25
26
26
27
- def create_jurisdiction ():
27
+ @pytest .fixture
28
+ def jurisdiction ():
28
29
Division .objects .create (id = "ocd-division/country:us" , name = "USA" )
29
30
return Jurisdiction .objects .create (id = "jid" , division_id = "ocd-division/country:us" )
30
31
31
32
33
+ @pytest .fixture
34
+ def organization (jurisdiction ):
35
+ return Organization .objects .create (name = "WWE" , jurisdiction_id = "jid" )
36
+
37
+
38
+ @pytest .fixture
39
+ def person ():
40
+ class PersonFactory :
41
+ def build (self , ** kwargs ):
42
+ person_info = {
43
+ "name" : "George Washington" ,
44
+ "family_name" : "Washington" ,
45
+ }
46
+
47
+ person_info .update (kwargs )
48
+
49
+ return Person .objects .create (** person_info )
50
+
51
+ return PersonFactory ()
52
+
53
+
32
54
@pytest .mark .django_db
33
- def test_get_stale_objects (subparsers ):
34
- _ = create_jurisdiction ()
35
- o = Organization .objects .create (name = "WWE" , jurisdiction_id = "jid" )
36
- p = Person .objects .create (name = "George Washington" , family_name = "Washington" )
37
- m = p .memberships .create (organization = o )
55
+ def test_get_stale_objects (subparsers , organization , person ):
56
+ stale_person = person .build ()
57
+ membership = stale_person .memberships .create (organization = organization )
38
58
39
- expected_stale_objects = {p , o , m }
59
+ expected_stale_objects = {stale_person , organization , membership }
40
60
41
61
a_week_from_now = datetime .now (tz = timezone .utc ) + timedelta (days = 7 )
42
62
with freeze_time (a_week_from_now ):
43
- p = Person . objects . create (name = "Thomas Jefferson" , family_name = "Jefferson" )
44
- p .memberships .create (organization = o )
63
+ fresh_person = person . build (name = "Thomas Jefferson" , family_name = "Jefferson" )
64
+ fresh_person .memberships .create (organization = organization )
45
65
assert set (Command (subparsers ).get_stale_objects (7 )) == expected_stale_objects
46
66
47
67
48
68
@pytest .mark .django_db
49
- def test_remove_stale_objects (subparsers ):
50
- _ = create_jurisdiction ()
51
- o = Organization .objects .create (name = "WWE" , jurisdiction_id = "jid" )
52
- p = Person .objects .create (name = "George Washington" , family_name = "Washington" )
53
- m = p .memberships .create (organization = o )
69
+ def test_remove_stale_objects (subparsers , organization , person ):
70
+ stale_person = person .build ()
71
+ membership = stale_person .memberships .create (organization = organization )
54
72
55
- expected_stale_objects = {p , o , m }
73
+ expected_stale_objects = {stale_person , organization , membership }
56
74
57
75
a_week_from_now = datetime .now (tz = timezone .utc ) + timedelta (days = 7 )
58
76
with freeze_time (a_week_from_now ):
59
- p = Person . objects . create (name = "Thomas Jefferson" , family_name = "Jefferson" )
60
- p .memberships .create (organization = o )
77
+ fresh_person = person . build (name = "Thomas Jefferson" , family_name = "Jefferson" )
78
+ fresh_person .memberships .create (organization = organization )
61
79
62
80
Command (subparsers ).remove_stale_objects (7 )
63
81
for obj in expected_stale_objects :
@@ -66,56 +84,57 @@ def test_remove_stale_objects(subparsers):
66
84
67
85
68
86
@pytest .mark .django_db
69
- def test_clean_command (subparsers ):
70
- _ = create_jurisdiction ()
71
- o = Organization .objects .create (name = "WWE" , jurisdiction_id = "jid" )
72
-
73
- stale_person = Person .objects .create (
74
- name = "George Washington" , family_name = "Washington"
75
- )
76
- stale_membership = stale_person .memberships .create (organization = o )
87
+ def test_clean_command (subparsers , organization , person ):
88
+ stale_person = person .build ()
89
+ stale_membership = stale_person .memberships .create (organization = organization )
77
90
78
91
a_week_from_now = datetime .now (tz = timezone .utc ) + timedelta (days = 7 )
79
92
with freeze_time (a_week_from_now ):
80
- not_stale_person = Person .objects .create (
81
- name = "Thomas Jefferson" , family_name = "Jefferson"
93
+ fresh_person = person .build (name = "Thomas Jefferson" , family_name = "Jefferson" )
94
+ not_stale_membership = fresh_person .memberships .create (
95
+ organization = organization
82
96
)
83
- not_stale_membership = not_stale_person .memberships .create (organization = o )
84
- o .save () # Update org's last_seen field
97
+ organization .save () # Update org's last_seen field
85
98
86
99
# Call clean command
87
100
Command (subparsers ).handle (
88
- argparse .Namespace (noinput = True , report = False , window = 7 , yes = False ), []
101
+ argparse .Namespace (report = False , window = 7 , yes = True , max = 10 ), []
89
102
)
90
103
91
104
expected_stale_objects = {stale_person , stale_membership }
92
105
for obj in expected_stale_objects :
93
106
was_deleted = not type (obj ).objects .filter (id = obj .id ).exists ()
94
107
assert was_deleted
95
108
96
- expected_not_stale_objects = {o , not_stale_person , not_stale_membership }
109
+ expected_not_stale_objects = {organization , fresh_person , not_stale_membership }
97
110
for obj in expected_not_stale_objects :
98
111
was_not_deleted = type (obj ).objects .filter (id = obj .id ).exists ()
99
112
assert was_not_deleted
100
113
101
114
102
115
@pytest .mark .django_db
103
- def test_clean_command_failsafe (subparsers ):
104
- _ = create_jurisdiction ()
105
- o = Organization .objects .create (name = "WWE" , jurisdiction_id = "jid" )
106
-
107
- stale_people = [
108
- Person .objects .create (name = "George Washington" , family_name = "Washington" )
109
- for i in range (20 )
110
- ]
111
- stale_memberships = [ # noqa
112
- p .memberships .create (organization = o ) for p in stale_people
113
- ]
116
+ def test_clean_command_failsafe (subparsers , organization , person ):
117
+ stale_people = [person .build () for i in range (20 )]
118
+ for p in stale_people :
119
+ p .memberships .create (organization = organization )
114
120
115
121
a_week_from_now = datetime .now (tz = timezone .utc ) + timedelta (days = 7 )
116
122
with freeze_time (a_week_from_now ):
117
123
with pytest .raises (SystemExit ):
118
124
# Should trigger failsafe exist when deleting more than 10 objects
119
125
Command (subparsers ).handle (
120
- argparse .Namespace (noinput = True , report = False , window = 7 , yes = False ), []
126
+ argparse .Namespace (report = False , window = 7 , yes = False , max = 10 ), []
121
127
)
128
+
129
+ with pytest .raises (SystemExit ):
130
+ # Should trigger failsafe exist when deleting more than 10 objects,
131
+ # even when yes is specified
132
+ Command (subparsers ).handle (
133
+ argparse .Namespace (report = False , window = 7 , yes = True , max = 10 ), []
134
+ )
135
+
136
+ # Should proceed without error, since max is increased (1 organization,
137
+ # 20 people, 20 memberships)
138
+ Command (subparsers ).handle (
139
+ argparse .Namespace (report = False , window = 7 , max = 41 , yes = True ), []
140
+ )
0 commit comments