4 import simplejson as json
7 from django.core import mail
8 from django.test import TestCase
9 from htsworkflow.frontend.experiments import models
10 from htsworkflow.frontend.experiments import experiments
11 from htsworkflow.frontend.auth import apidata
13 class ExperimentsTestCases(TestCase):
14 fixtures = ['test_flowcells.json']
19 def test_flowcell_information(self):
21 Check the code that packs the django objects into simple types.
23 for fc_id in [u'303TUAAXX', u"42JTNAAXX", "42JU1AAXX"]:
24 fc_dict = experiments.flowcell_information(fc_id)
25 fc_django = models.FlowCell.objects.get(flowcell_id=fc_id)
26 self.failUnlessEqual(fc_dict['flowcell_id'], fc_id)
27 self.failUnlessEqual(fc_django.flowcell_id, fc_id)
28 self.failUnlessEqual(fc_dict['sequencer'], fc_django.sequencer.name)
29 self.failUnlessEqual(fc_dict['read_length'], fc_django.read_length)
30 self.failUnlessEqual(fc_dict['notes'], fc_django.notes)
31 self.failUnlessEqual(fc_dict['cluster_station'], fc_django.cluster_station.name)
33 for lane in fc_django.lane_set.all():
34 lane_dict = fc_dict['lane_set'][lane.lane_number]
35 self.failUnlessEqual(lane_dict['cluster_estimate'], lane.cluster_estimate)
36 self.failUnlessEqual(lane_dict['comment'], lane.comment)
37 self.failUnlessEqual(lane_dict['flowcell'], lane.flowcell.flowcell_id)
38 self.failUnlessEqual(lane_dict['lane_number'], lane.lane_number)
39 self.failUnlessEqual(lane_dict['library_name'], lane.library.library_name)
40 self.failUnlessEqual(lane_dict['library_id'], lane.library.library_id)
41 self.failUnlessAlmostEqual(lane_dict['pM'], float(lane.pM))
42 self.failUnlessEqual(lane_dict['library_species'],
43 lane.library.library_species.scientific_name)
45 response = self.client.get('/experiments/config/%s/json' % (fc_id,), apidata)
46 # strptime isoformat string = '%Y-%m-%dT%H:%M:%S'
47 fc_json = json.loads(response.content)
48 self.failUnlessEqual(fc_json['flowcell_id'], fc_id)
49 self.failUnlessEqual(fc_json['sequencer'], fc_django.sequencer.name)
50 self.failUnlessEqual(fc_json['read_length'], fc_django.read_length)
51 self.failUnlessEqual(fc_json['notes'], fc_django.notes)
52 self.failUnlessEqual(fc_json['cluster_station'], fc_django.cluster_station.name)
55 for lane in fc_django.lane_set.all():
56 lane_dict = fc_json['lane_set'][unicode(lane.lane_number)]
57 self.failUnlessEqual(lane_dict['cluster_estimate'], lane.cluster_estimate)
58 self.failUnlessEqual(lane_dict['comment'], lane.comment)
59 self.failUnlessEqual(lane_dict['flowcell'], lane.flowcell.flowcell_id)
60 self.failUnlessEqual(lane_dict['lane_number'], lane.lane_number)
61 self.failUnlessEqual(lane_dict['library_name'], lane.library.library_name)
62 self.failUnlessEqual(lane_dict['library_id'], lane.library.library_id)
63 self.failUnlessAlmostEqual(lane_dict['pM'], float(lane.pM))
64 self.failUnlessEqual(lane_dict['library_species'],
65 lane.library.library_species.scientific_name)
67 def test_invalid_flowcell(self):
69 Make sure we get a 404 if we request an invalid flowcell ID
71 response = self.client.get('/experiments/config/nottheone/json', apidata)
72 self.failUnlessEqual(response.status_code, 404)
74 def test_no_key(self):
76 Require logging in to retrieve meta data
78 response = self.client.get(u'/experiments/config/303TUAAXX/json')
79 self.failUnlessEqual(response.status_code, 403)
81 def test_library_id(self):
83 Library IDs should be flexible, so make sure we can retrive a non-numeric ID
85 response = self.client.get('/experiments/config/303TUAAXX/json', apidata)
86 self.failUnlessEqual(response.status_code, 200)
87 flowcell = json.loads(response.content)
89 self.failUnlessEqual(flowcell['lane_set']['3']['library_id'], 'SL039')
91 response = self.client.get('/samples/library/SL039/json', apidata)
92 self.failUnlessEqual(response.status_code, 200)
93 library_sl039 = json.loads(response.content)
95 self.failUnlessEqual(library_sl039['library_id'], 'SL039')
97 class TestEmailNotify(TestCase):
98 fixtures = ['test_flowcells.json']
100 def test_started_email_not_logged_in(self):
101 response = self.client.get('/experiments/started/153/')
102 self.failUnlessEqual(response.status_code, 302)
104 def test_started_email_logged_in_user(self):
105 self.client.login(username='test', password='BJOKL5kAj6aFZ6A5')
106 response = self.client.get('/experiments/started/153/')
107 self.failUnlessEqual(response.status_code, 302)
109 def test_started_email_logged_in_staff(self):
110 self.client.login(username='admintest', password='BJOKL5kAj6aFZ6A5')
111 response = self.client.get('/experiments/started/153/')
112 self.failUnlessEqual(response.status_code, 200)
114 def test_started_email_send(self):
115 self.client.login(username='admintest', password='BJOKL5kAj6aFZ6A5')
116 response = self.client.get('/experiments/started/153/')
117 self.failUnlessEqual(response.status_code, 200)
119 self.failUnless('pk1@example.com' in response.content)
120 self.failUnless('Lane #8 : (11064) Paired ends 104' in response.content)
122 response = self.client.get('/experiments/started/153/', {'send':'1','bcc':'on'})
123 self.failUnlessEqual(response.status_code, 200)
124 self.failUnlessEqual(len(mail.outbox), 4)
125 for m in mail.outbox:
126 self.failUnless(len(m.body) > 0)