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

1import json 

2 

3from parameterized import parameterized 

4from rest_framework import status 

5from rest_framework.test import force_authenticate 

6 

7from rest_api import models 

8from rest_api import viewsets 

9from rest_api.test import mixins 

10from rest_api.viewsets_sample import SampleViewSet 

11 

12 

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 

22 

23 def test_get_alignment_data(self): 

24 pass # TODO 

25 

26 

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 

36 

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)