aboutsummaryrefslogtreecommitdiff
path: root/tests/unit/db/test_sample_data.py
blob: 4c03dbde24068633c91a42c497c72729ac104bc7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import pytest

from gn3.db.sample_data import insert_sample_data
from gn3.db.sample_data import delete_sample_data


@pytest.mark.unit_test
def test_insert_sample_data(mocker):
    mock_conn = mocker.MagicMock()
    strain_id, data_id, inbredset_id = 1, 17373, 20
    with mock_conn.cursor() as cursor:
        cursor.fetchone.side_effect = (0, [19, ], 0)
        mocker.patch('gn3.db.sample_data.get_sample_data_ids',
                     return_value=(strain_id, data_id, inbredset_id))
        insert_sample_data(conn=mock_conn,
                           trait_name=35,
                           data="BXD1,18,3,0,M",
                           csv_header="Strain Name,Value,SE,Count,Sex",
                           phenotype_id=10007)
        calls = [mocker.call("SELECT Id FROM PublishData where Id = %s "
                             "AND StrainId = %s",
                             (data_id, strain_id)),
                 mocker.call("INSERT INTO PublishData "
                             "(StrainId, Id, value) VALUES (%s, %s, %s)",
                             (strain_id, data_id, '18')),
                 mocker.call("INSERT INTO PublishSE "
                             "(StrainId, DataId, error) VALUES (%s, %s, %s)",
                             (strain_id, data_id, '3')),
                 mocker.call("INSERT INTO NStrain "
                             "(StrainId, DataId, count) VALUES (%s, %s, %s)",
                             (strain_id, data_id, '0')),
                 mocker.call("SELECT Id FROM CaseAttribute WHERE Name = %s",
                             ("Sex",)),
                 mocker.call("SELECT StrainId FROM CaseAttributeXRefNew "
                             "WHERE StrainId = %s AND "
                             "CaseAttributeId = %s AND InbredSetId = %s",
                             (strain_id, 19, inbredset_id)),
                 mocker.call("INSERT INTO CaseAttributeXRefNew "
                             "(StrainId, CaseAttributeId, Value, "
                             "InbredSetId) VALUES (%s, %s, %s, %s)",
                             (strain_id, 19, 'M', inbredset_id))
                 ]
        cursor.execute.assert_has_calls(calls, any_order=False)


@pytest.mark.unit_test
def test_delete_sample_data(mocker):
    mock_conn = mocker.MagicMock()
    strain_id, data_id, inbredset_id = 1, 17373, 20
    with mock_conn.cursor() as cursor:
        cursor.fetchone.side_effect = (0, [19, ], 0)
        mocker.patch('gn3.db.sample_data.get_sample_data_ids',
                     return_value=(strain_id, data_id, inbredset_id))
        delete_sample_data(conn=mock_conn,
                           trait_name=35,
                           data="BXD1,18,3,0,M",
                           csv_header="Strain Name,Value,SE,Count,Sex",
                           phenotype_id=10007)
        calls = [mocker.call("DELETE FROM PublishData WHERE "
                             "StrainId = %s AND Id = %s",
                             (strain_id, data_id)),
                 mocker.call("DELETE FROM PublishSE WHERE "
                             "StrainId = %s AND DataId = %s",
                             (strain_id, data_id)),
                 mocker.call("DELETE FROM NStrain WHERE "
                             "StrainId = %s AND DataId = %s",
                             (strain_id, data_id)),
                 mocker.call("DELETE FROM CaseAttributeXRefNew WHERE "
                             "StrainId = %s AND CaseAttributeId = "
                             "(SELECT CaseAttributeId FROM "
                             "CaseAttribute WHERE Name = %s) "
                             "AND InbredSetId = %s",
                             (strain_id, "Sex", inbredset_id)),
                 ]
        cursor.execute.assert_has_calls(calls, any_order=False)