Coverage for rest_api/test/test_views/test_viewsets.py: 100%
27 statements
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-10 03:22 +0000
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-10 03:22 +0000
1import json
3from parameterized import parameterized
4from rest_framework import status
5from rest_framework.test import force_authenticate
7from rest_api import models
8from rest_api import viewsets
9from rest_api.test import mixins
10from rest_api.viewsets_sample import SampleViewSet
13class AlignmentViewSetTest(
14 mixins.FixtureAPITestCase,
15 mixins.ListViewSetTestMixin,
16 mixins.CreateViewSetTestMixin,
17 mixins.UpdateViewSetTestMixin,
18):
19 model = models.Alignment
20 viewset = viewsets.AlignmentViewSet
21 expected_list_count = 10
23 def test_get_alignment_data(self):
24 pass # TODO
27class SampleViewSetTest(
28 mixins.FixtureAPITestCase,
29 mixins.ListViewSetTestMixin,
30 mixins.CreateViewSetTestMixin,
31 mixins.UpdateViewSetTestMixin,
32):
33 model = models.Sample
34 viewset = SampleViewSet
35 expected_list_count = 10
37 @parameterized.expand(
38 [
39 (
40 "Property",
41 {
42 "label": "Property",
43 "property_name": "zip_code",
44 "filter_type": "exact",
45 "value": "40477",
46 "exclude": False,
47 },
48 3,
49 ),
50 (
51 "SNP Nt",
52 {
53 "label": "SNP Nt",
54 "ref_nuc": "T",
55 "ref_pos": 670,
56 "alt_nuc": "G",
57 "replicon_accession": "MN908947.3",
58 "exclude": False,
59 },
60 10,
61 ),
62 (
63 "Del AA",
64 {
65 "label": "Del AA",
66 "protein_symbol": "ORF1a",
67 "first_deleted": 2084,
68 "last_deleted": 2086,
69 "exclude": False,
70 },
71 0,
72 ),
73 (
74 "Del AA",
75 {
76 "label": "Del AA",
77 "protein_symbol": "ORF1a",
78 "first_deleted": 3675,
79 "last_deleted": 3677,
80 "exclude": False,
81 },
82 10,
83 ),
84 (
85 "Del Nt",
86 {
87 "label": "Del Nt",
88 "first_deleted": 11287,
89 "last_deleted": 1129,
90 "replicon_accession": "MN908947.3",
91 "exclude": False,
92 },
93 0,
94 ),
95 (
96 "Del Nt",
97 {
98 "label": "Del Nt",
99 "first_deleted": 29734,
100 "last_deleted": 29759,
101 "replicon_accession": "MN908947.3",
102 "exclude": False,
103 },
104 10,
105 ),
106 (
107 "Ins AA",
108 {
109 "label": "Ins AA",
110 "protein_symbol": "S",
111 "ref_aa": "R",
112 "ref_pos": 21608,
113 "alt_aa": "RGTCATGCCGCTGTEPE",
114 },
115 0,
116 ),
117 (
118 "Ins Nt",
119 {
120 "label": "Ins Nt",
121 "ref_nuc": "G",
122 "ref_pos": 21608,
123 "alt_nuc": "GTCATGCCGCTGT",
124 "replicon_accession": "MN908947.3",
125 },
126 10,
127 ),
128 ("Replicon", {"label": "Replicon", "replicon_accession": "MN908947.3"}, 10),
129 ]
130 )
131 def test_genome_filters(self, _, filter, expected_count):
132 view = self.viewset.as_view({"get": "genomes"})
133 request = self.factory.get(
134 "/api/samples/genomes/",
135 data={
136 "reference": "MN908947.3",
137 "filters": json.dumps({"andFilter": [filter]}),
138 },
139 )
140 user = self.get_request_user()
141 force_authenticate(request, user=user)
142 response = view(request)
143 self.assertEqual(response.status_code, status.HTTP_200_OK)
144 self.assertEqual(response.data["count"], expected_count)