16
16
along with this program. If not, see <http://www.gnu.org/licenses/>.
19
import test, os, shutil, bz2
20
20
from taskcoachlib import persistence, config
21
21
from taskcoachlib.domain import date, task
24
24
class DummyFile(object):
27
28
def close(self, *args, **kwargs): # pylint: disable=W0613
41
42
def _read(self, *args, **kwargs): # pylint: disable=W0613
42
return [task.Task()], [], [], None, None
43
return [task.Task()], [], [], None, dict(), None
47
48
def filename(self):
48
49
return super(DummyTaskFile, self).filename() or 'whatever.tsk'
52
class LocalSettings(config.Settings):
53
def __init__(self, *args, **kwargs):
54
self.__path = os.path.join(os.getcwd(), 'testdata')
55
if os.path.exists(self.__path):
56
shutil.rmtree(self.__path)
58
super(LocalSettings, self).__init__(*args, **kwargs)
60
def _pathToDataDir(self, *args, **kwargs):
61
return self.__path, False
51
64
class AutoBackupTest(test.TestCase):
52
65
# pylint: disable=E1101,E1002,W0232
54
67
super(AutoBackupTest, self).setUp()
55
task.Task.settings = self.settings = config.Settings(load=False)
68
task.Task.settings = self.settings = LocalSettings(load=False)
56
69
self.taskFile = DummyTaskFile()
57
70
self.backup = persistence.AutoBackup(self.settings, copyfile=self.onCopyFile)
58
71
self.copyCalled = False
74
super(AutoBackupTest, self).tearDown()
77
if os.path.exists('test.tsk'):
60
80
def onCopyFile(self, *args): # pylint: disable=W0613
61
81
self.copyCalled = True
88
108
[self.backup.backupFilename(self.taskFile, now=lambda: date.DateTime(2000,1,1,1,1,1))]
112
def testBackupMigrationManifest(self):
113
self.taskFile.setFilename('test.tsk')
114
self.backup.onTaskFileRead(self.taskFile)
115
with file(os.path.join(self.settings.pathToBackupsDir(), 'backups.xml'), 'rb') as fp:
117
self.assertEqual(content, '<backupfiles><file sha="13cf6835565aaf4ab1f78e922b9917f9a4c7a856">test.tsk</file></backupfiles>')
119
def testBackupMigration(self):
120
self.taskFile.setFilename('test.tsk')
121
with file('test.20140715-010203.tsk.bak', 'wb') as fp:
122
fp.write('Hello, world')
123
self.backup.onTaskFileRead(self.taskFile)
124
self.failIf(os.path.exists('test.20140715-010203.tsk.bak'))
126
backupName = os.path.join(self.settings.pathToBackupsDir(), '13cf6835565aaf4ab1f78e922b9917f9a4c7a856', '20140715010203.bak')
127
self.failUnless(os.path.exists(backupName))
128
self.assertEqual(bz2.BZ2File(backupName).read(), 'Hello, world')
92
130
def testNoBackupFiles(self):
93
131
self.assertEqual([], self.backup.backupFiles(self.taskFile, glob=lambda pattern: []))
117
155
def testBackupFilename(self):
118
156
now = date.DateTime(2004,1,1)
119
self.assertEqual('whatever.20040101-000000.tsk.bak',
120
self.backup.backupFilename(self.taskFile, lambda: now)) # pylint: disable=W0212
122
def testBackupFilenameOfBackupFilename(self):
123
self.taskFile.setFilename('whatever.20040101-000000.tsk.bak')
124
now = date.DateTime(2004,1,2)
125
self.assertEqual('whatever.20040101-000000.20040102-000000.tsk.bak',
157
self.assertEqual(os.path.join(self.settings.pathToBackupsDir(), 'c81e25c3e04922232ab8eb87be8337c806a44209', '20040101000000.bak'),
126
158
self.backup.backupFilename(self.taskFile, lambda: now)) # pylint: disable=W0212
128
160
def testCreateBackupOnSave(self):
129
self.settings.set('file', 'backup', 'True')
162
self.copyCalled = False
130
163
self.taskFile.tasks().append(task.Task())
131
164
self.taskFile.save()
132
165
self.failUnless(self.copyCalled)
134
def testCreateBackupOnSave_ButBackupOff(self):
135
self.settings.set('file', 'backup', 'False')
136
self.taskFile.tasks().append(task.Task())
138
self.failIf(self.copyCalled)
140
167
def testDontCreateBackupOnOpen(self):
141
self.settings.set('file', 'backup', 'True')
142
168
self.taskFile.load()
143
169
self.failIf(self.copyCalled)
145
171
def testDontCreateBackupWhenSettingFilename(self):
146
self.settings.set('file', 'backup', 'True')
147
172
self.taskFile.setFilename('newname.tsk')
148
173
self.failIf(self.copyCalled)