Skip to content

Commit d9bce73

Browse files
committed
Backup - update
additional tests
1 parent d6eee5e commit d9bce73

File tree

2 files changed

+264
-0
lines changed

2 files changed

+264
-0
lines changed
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
import unittest
2+
3+
import time
4+
from mock import MagicMock
5+
6+
from dls_barcode.data_store.backup import Backup
7+
from dls_barcode.data_store.record import Record
8+
9+
ID0 = "id0"
10+
ID1 = "id1"
11+
ID2 = "id2"
12+
ID3 = "id3"
13+
14+
class TestBackup(unittest.TestCase):
15+
16+
def setUp(self):
17+
self.comms_man = MagicMock()
18+
self.backup_time = MagicMock()
19+
self.backup_time.value.return_value = 3
20+
21+
def test_truncate_removes_all_old_records(self):
22+
# Arrange
23+
records = self._get_records()
24+
self.comms_man.load_records_from_file.return_value = records
25+
26+
# Act
27+
backup = Backup(self.comms_man, self.backup_time)
28+
orig_size = len(backup._records)
29+
backup._truncate_record_list()
30+
31+
# Assert
32+
new_size = len(backup._records)
33+
self.assertNotEqual(orig_size, new_size)
34+
self.assertEqual(new_size, 0)
35+
36+
def test_backup_records_adds_new_records_to_existing_list(self):
37+
# Arrange
38+
records = self._get_records()
39+
self.comms_man.load_records_from_file.return_value = records
40+
41+
# Act
42+
backup = Backup(self.comms_man, self.backup_time)
43+
org_size = len(backup._records)
44+
backup._truncate_record_list = MagicMock() #mute truncate for the test
45+
backup.backup_records(records)
46+
47+
# Assert
48+
self.assertEqual(len(backup._records), 2*org_size)
49+
50+
def test_backup_records_removes_old_records_when_its_called(self):
51+
# Arrange
52+
records = self._get_records()
53+
self.comms_man.load_records_from_file.return_value = records
54+
55+
# Act
56+
backup = Backup(self.comms_man, self.backup_time)
57+
backup.backup_records(records)
58+
59+
# Assert
60+
self.assertEqual(len(backup._records), 0)
61+
62+
def test_backup_records_to_csv_file(self):
63+
#Arrange
64+
self.comms_man.to_csv_file = MagicMock()
65+
backup = Backup(self.comms_man, self.backup_time)
66+
67+
# Act
68+
backup.backup_records([])
69+
70+
#Assert
71+
self.comms_man.to_csv_file.assert_called_once()
72+
73+
def test_is_old_returns_true_for_records_older_than_assumed_number_of_weeks(self):
74+
# Arrange
75+
weeks = self.backup_time.value.return_value
76+
timestamp = str(time.time() - 604800 * (weeks + 1))
77+
rec_string = "f59c92c1;" + timestamp + ";test.png;None;ABCDE123,ABCDE123;1569:1106:70-2307:1073:68-1944:1071:68"
78+
record = Record.from_string(rec_string)
79+
80+
# Act
81+
backup = Backup(self.comms_man, self.backup_time)
82+
83+
# Assert
84+
self.assertTrue(backup._is_old(record))
85+
86+
def test_is_old_returns_false_for_records_younger_than_assumed_number_of_weeks(self):
87+
# Arrange
88+
weeks = self.backup_time.value.return_value
89+
timestamp = str(time.time() - 604800 * (weeks - 1))
90+
rec_string = "f59c92c1;"+timestamp+";test.png;None;ABCDE123,ABCDE123;1569:1106:70-2307:1073:68-1944:1071:68"
91+
record = Record.from_string(rec_string)
92+
93+
# Act
94+
backup = Backup(self.comms_man, self.backup_time)
95+
96+
# Assert
97+
self.assertFalse(backup._is_old(record))
98+
99+
def _get_record_strings(self):
100+
str_rep = list()
101+
str_rep.append(ID0 + ";1494238923.0;test" + ID0 + ".png;None;DLSL-001,DLSL-010,DLSL-011,DLSL-012;1569:1106:70-2307:1073:68-1944:1071:68")
102+
str_rep.append(ID1 + ";1494238922.0;test" + ID1 + ".png;None;DLSL-002,DLSL-010,DLSL-011,DLSL-012;1569:1106:70-2307:1073:68-1944:1071:68")
103+
str_rep.append(ID2 + ";1494238921.0;test" + ID2 + ".png;None;DLSL-003,DLSL-010,DLSL-011,DLSL-012;1569:1106:70-2307:1073:68-1944:1071:68")
104+
str_rep.append(ID3 + ";1494238920.0;test" + ID3 + ".png;None;DLSL-004,DLSL-010,DLSL-011,DLSL-012;1569:1106:70-2307:1073:68-1944:1071:68")
105+
return str_rep
106+
107+
def _get_records(self):
108+
strings = self._get_record_strings()
109+
rep = list()
110+
for str in strings:
111+
rep.append(Record.from_string(str))
112+
return rep
Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
import unittest
2+
3+
import os
4+
from mock import MagicMock
5+
6+
from dls_barcode.data_store.comms_manager import CommsManager
7+
from dls_barcode.data_store.record import Record
8+
9+
ID0 = "id0"
10+
ID1 = "id1"
11+
ID2 = "id2"
12+
ID3 = "id3"
13+
14+
15+
class TestCommsManager(unittest.TestCase):
16+
17+
def setUp(self):
18+
self.directory = MagicMock()
19+
self.directory.value.return_value = 'dir'
20+
self.file_name = 'test'
21+
22+
def test_load_records_from_file_returns_empty_record_list_when_no_file(self):
23+
cm = CommsManager(self.directory, self.file_name)
24+
records = cm.load_records_from_file()
25+
26+
self.assertEqual(len(records), 0)
27+
28+
def test_load_record_skip_invalid_lines(self):
29+
# Arrange
30+
cm = CommsManager(self.directory, self.file_name)
31+
cm._file_manager = MagicMock()
32+
cm._file_manager.read_lines.return_value = self._invalid_record_strings()
33+
34+
# Act
35+
records = cm.load_records_from_file()
36+
37+
# Assert
38+
self.assertEqual(len(records), 2)
39+
self.assertEqual(records[0].id, ID0)
40+
self.assertEqual(records[1].id, ID2)
41+
42+
def test_to_file_stores_records_in_file(self):
43+
# Arrange
44+
cm = CommsManager(self.directory, self.file_name)
45+
cm._file_manager = MagicMock()
46+
file_name = os.path.join(self.directory.value.return_value, self.file_name + ".txt")
47+
records = self._get_records()
48+
49+
# Act
50+
cm.to_file(records)
51+
52+
# Assert
53+
((filename_used, record_lines_used), kwargs) = cm._file_manager.write_lines.call_args_list[0]
54+
self.assertIn(file_name, filename_used)
55+
for r, l in zip(records, record_lines_used):
56+
self.assertIn(r.to_string(), l)
57+
58+
def test_to_file_csv_store_in_csv_file(self):
59+
# Arrange
60+
cm = CommsManager(self.directory, self.file_name)
61+
cm._file_manager = MagicMock()
62+
file_name = os.path.join(self.directory.value.return_value, self.file_name + ".csv")
63+
records = self._get_records()
64+
65+
# Act
66+
cm.to_csv_file(records)
67+
68+
# Assert
69+
((filename_used, record_lines_used), kwargs) = cm._file_manager.write_lines.call_args_list[0]
70+
self.assertEqual(file_name, filename_used)
71+
for r, l in zip(records, record_lines_used):
72+
self.assertIn(r.to_csv_string(), l)
73+
74+
def test_make_image_dir_attempts_to_make_dir_if_it_does_not_exist(self):
75+
# Arrange
76+
cm = CommsManager(self.directory, self.file_name)
77+
cm._file_manager = MagicMock()
78+
cm._file_manager.is_dir.return_value = False
79+
img_dir = os.path.join(self.directory.value.return_value, "img_dir")
80+
81+
# Act
82+
cm.make_img_dir()
83+
84+
# Assert
85+
cm._file_manager.is_dir.assert_called_once_with(img_dir)
86+
cm._file_manager.make_dir.assert_called_once_with(img_dir)
87+
88+
def test_make_image_dir_doent_make_dir_if_it_does_not_exist(self):
89+
90+
# Arrange
91+
cm = CommsManager(self.directory, self.file_name)
92+
cm._file_manager = MagicMock()
93+
cm._file_manager.is_dir.return_value = True
94+
img_dir = os.path.join(self.directory.value.return_value, "img_dir")
95+
96+
# Act
97+
cm.make_img_dir()
98+
99+
# Assert
100+
cm._file_manager.is_dir.assert_called_once_with(img_dir)
101+
cm._file_manager.make_dir.assert_not_called()
102+
103+
def test_remove_image_file_attempts_to_remove_file_when_it_exists(self):
104+
# Arrange
105+
cm = CommsManager(self.directory, self.file_name)
106+
cm._file_manager = MagicMock()
107+
cm._file_manager.is_file.return_value = True
108+
109+
# Act
110+
cm.remove_img_file(MagicMock())
111+
112+
# Assert
113+
cm._file_manager.remove.assert_called_once()
114+
115+
def test_remove_image_file_does_not_attempt_to_remove_file_when_it_exists(self):
116+
# Arrange
117+
cm = CommsManager(self.directory, self.file_name)
118+
cm._file_manager = MagicMock()
119+
cm._file_manager.is_file.return_value = False
120+
121+
# Act
122+
cm.remove_img_file(MagicMock())
123+
124+
# Assert
125+
cm._file_manager.remove.assert_not_called()
126+
127+
128+
def _invalid_record_strings(self):
129+
str_rep = list()
130+
str_rep.append(ID0 + ";1494238925.0;test.png;None;DLSL-009,DLSL-010,DLSL-011,DLSL-012;1569:1106:70-2307:1073:68-1944:1071:68")
131+
str_rep.append(ID1 + ";Invalid record string")
132+
str_rep.append(ID2 + ";1494238921.0;test.png;None;DLSL-008,DLSL-010,DLSL-011,DLSL-012;1569:1106:70-2307:1073:68-1944:1071:68")
133+
return str_rep
134+
135+
def _get_record_strings(self):
136+
str_rep = list()
137+
str_rep.append(ID0 + ";1494238923.0;test" + ID0 + ".png;None;DLSL-001,DLSL-010,DLSL-011,DLSL-012;1569:1106:70-2307:1073:68-1944:1071:68")
138+
str_rep.append(ID1 + ";1494238922.0;test" + ID1 + ".png;None;DLSL-002,DLSL-010,DLSL-011,DLSL-012;1569:1106:70-2307:1073:68-1944:1071:68")
139+
str_rep.append(ID2 + ";1494238921.0;test" + ID2 + ".png;None;DLSL-003,DLSL-010,DLSL-011,DLSL-012;1569:1106:70-2307:1073:68-1944:1071:68")
140+
str_rep.append(ID3 + ";1494238920.0;test" + ID3 + ".png;None;DLSL-004,DLSL-010,DLSL-011,DLSL-012;1569:1106:70-2307:1073:68-1944:1071:68")
141+
return str_rep
142+
143+
def _get_records(self):
144+
strings = self._get_record_strings()
145+
rep = list()
146+
for str in strings:
147+
rep.append(Record.from_string(str))
148+
return rep
149+
150+
151+
152+

0 commit comments

Comments
 (0)