|
6 | 6 | from django.db.models import Q |
7 | 7 | from django.db.models.signals import post_save |
8 | 8 | from django.utils import timezone |
9 | | -from factories import DataSourceFactory, DeviceFactory, RunTestsJobFactory, SelectorFactory, TenantFactory |
| 9 | +from factories import ( |
| 10 | + BackupPointFactory, |
| 11 | + DataSourceFactory, |
| 12 | + DeviceFactory, |
| 13 | + RunTestsJobFactory, |
| 14 | + SelectorFactory, |
| 15 | + TenantFactory, |
| 16 | +) |
10 | 17 |
|
| 18 | +from validity.data_backup import BackupBackend |
| 19 | +from validity.integrations.errors import IntegrationError |
| 20 | +from validity.models import VDataSource |
11 | 21 | from validity.scripts.data_models import Message, SplitResult |
12 | 22 | from validity.scripts.runtests.split import SplitWorker |
13 | 23 | from validity.utils.logger import Logger |
@@ -79,6 +89,34 @@ def test_sync_datasources(create_custom_fields, overriding_datasource): |
79 | 89 | logger.info.assert_called_once() |
80 | 90 |
|
81 | 91 |
|
| 92 | +@pytest.mark.django_db |
| 93 | +def test_backup_datasources_success(): |
| 94 | + backup_fn = Mock() |
| 95 | + bp1 = BackupPointFactory(backup_after_sync=True, name="bp1") |
| 96 | + worker = SplitWorker(backup_fn=backup_fn) |
| 97 | + worker.backup_datasources(VDataSource.objects.all(), Logger()) |
| 98 | + backup_fn.assert_called_once() |
| 99 | + assert backup_fn.call_args[0][0] == {bp1} |
| 100 | + |
| 101 | + |
| 102 | +@pytest.mark.django_db(transaction=True, reset_sequences=True) |
| 103 | +def test_backup_datasources_fail(timezone_now, di): |
| 104 | + timezone_now(datetime.datetime(2000, 1, 2, 3, 4, tzinfo=datetime.timezone.utc)) |
| 105 | + bp = BackupPointFactory(backup_after_sync=True, name="bp1") |
| 106 | + worker = SplitWorker() |
| 107 | + backend = Mock(side_effect=IntegrationError("ERR123")) |
| 108 | + with di.override({BackupBackend: lambda: backend}): |
| 109 | + worker.backup_datasources(VDataSource.objects.all(), logger := Logger()) |
| 110 | + backend.assert_called_once_with(bp) |
| 111 | + assert logger.messages == [ |
| 112 | + Message( |
| 113 | + status="failure", |
| 114 | + message="Cannot back up [bp1](/plugins/validity/backup-points/1/). ERR123", |
| 115 | + time=datetime.datetime(2000, 1, 2, 3, 4, tzinfo=datetime.timezone.utc), |
| 116 | + ) |
| 117 | + ] |
| 118 | + |
| 119 | + |
82 | 120 | @pytest.mark.parametrize("device_num", [2]) |
83 | 121 | @pytest.mark.django_db(transaction=True, reset_sequences=True) |
84 | 122 | def test_call(selectors, devices, runtests_params, monkeypatch): |
|
0 commit comments