Return species information as part of the flowcell json information.
[htsworkflow.git] / htsworkflow / frontend / experiments / tests.py
1 try:
2     import json
3 except ImportError, e:
4     import simplejson as json
5     
6 from django.test import TestCase
7 from htsworkflow.frontend.experiments import models
8 from htsworkflow.frontend.experiments import experiments
9 from htsworkflow.frontend.auth import apidata
10
11 class ExperimentsTestCases(TestCase):
12     fixtures = ['test_flowcells.json']
13
14     def setUp(self):
15         pass
16
17     def test_flowcell_information(self):
18         """
19         Check the code that packs the django objects into simple types.
20         """
21         for fc_id in [u'303TUAAXX', u"42JTNAAXX", "42JU1AAXX"]:
22             fc_dict = experiments.flowcell_information(fc_id)
23             fc_django = models.FlowCell.objects.get(flowcell_id=fc_id)
24             self.failUnlessEqual(fc_dict['flowcell_id'], fc_id)
25             self.failUnlessEqual(fc_django.flowcell_id, fc_id)
26             self.failUnlessEqual(fc_dict['sequencer'], fc_django.sequencer.name)
27             self.failUnlessEqual(fc_dict['read_length'], fc_django.read_length)
28             self.failUnlessEqual(fc_dict['notes'], fc_django.notes)
29             self.failUnlessEqual(fc_dict['cluster_station'], fc_django.cluster_station.name)
30
31             for lane in fc_django.lane_set.all():
32                 lane_dict = fc_dict['lane_set'][lane.lane_number]
33                 self.failUnlessEqual(lane_dict['cluster_estimate'], lane.cluster_estimate)
34                 self.failUnlessEqual(lane_dict['comment'], lane.comment)
35                 self.failUnlessEqual(lane_dict['flowcell'], lane.flowcell.flowcell_id)
36                 self.failUnlessEqual(lane_dict['lane_number'], lane.lane_number)
37                 self.failUnlessEqual(lane_dict['library_name'], lane.library.library_name)
38                 self.failUnlessEqual(lane_dict['library_id'], lane.library.library_id)
39                 self.failUnlessAlmostEqual(lane_dict['pM'], float(lane.pM))
40                 self.failUnlessEqual(lane_dict['library_species'],
41                                      lane.library.library_species.scientific_name)
42                     
43             response = self.client.get('/experiments/config/%s/json' % (fc_id,), apidata)
44             # strptime isoformat string = '%Y-%m-%dT%H:%M:%S'
45             fc_json = json.loads(response.content)
46             self.failUnlessEqual(fc_json['flowcell_id'], fc_id)
47             self.failUnlessEqual(fc_json['sequencer'], fc_django.sequencer.name)
48             self.failUnlessEqual(fc_json['read_length'], fc_django.read_length)
49             self.failUnlessEqual(fc_json['notes'], fc_django.notes)
50             self.failUnlessEqual(fc_json['cluster_station'], fc_django.cluster_station.name)
51
52
53             for lane in fc_django.lane_set.all():
54                 lane_dict = fc_json['lane_set'][unicode(lane.lane_number)]
55                 self.failUnlessEqual(lane_dict['cluster_estimate'], lane.cluster_estimate)
56                 self.failUnlessEqual(lane_dict['comment'], lane.comment)
57                 self.failUnlessEqual(lane_dict['flowcell'], lane.flowcell.flowcell_id)
58                 self.failUnlessEqual(lane_dict['lane_number'], lane.lane_number)
59                 self.failUnlessEqual(lane_dict['library_name'], lane.library.library_name)
60                 self.failUnlessEqual(lane_dict['library_id'], lane.library.library_id)
61                 self.failUnlessAlmostEqual(lane_dict['pM'], float(lane.pM))
62                 self.failUnlessEqual(lane_dict['library_species'],
63                                      lane.library.library_species.scientific_name)
64
65     def test_invalid_flowcell(self):
66         """
67         Make sure we get a 404 if we request an invalid flowcell ID
68         """
69         response = self.client.get('/experiments/config/nottheone/json', apidata)
70         self.failUnlessEqual(response.status_code, 404)
71
72     def test_no_key(self):
73         """
74         Require logging in to retrieve meta data
75         """
76         response = self.client.get(u'/experiments/config/303TUAAXX/json')
77         self.failUnlessEqual(response.status_code, 403)
78
79     def test_library_id(self):
80         """
81         Library IDs should be flexible, so make sure we can retrive a non-numeric ID
82         """
83         response = self.client.get('/experiments/config/303TUAAXX/json', apidata)
84         self.failUnlessEqual(response.status_code, 200)
85         flowcell = json.loads(response.content)
86
87         self.failUnlessEqual(flowcell['lane_set']['3']['library_id'], 'SL039')
88
89         response = self.client.get('/samples/library/SL039/json', apidata)
90         self.failUnlessEqual(response.status_code, 200)
91         library_sl039 = json.loads(response.content)
92
93         self.failUnlessEqual(library_sl039['library_id'], 'SL039')
94
95 #class RetriveConfigTestCases(TestCase):
96 #    fixtures = ['test_flowcells.json']