Example #1
0
def add_sample(body):
    sample = Sample(barcode=body['barcode'],
                    student_id=body['student_id'],
                    computing_id=body['computing_id'],
                    date=body['date'])

    # Split the 4 digit location code into station and location
    loc_code = body['location']
    sample.location, sample.station = int(loc_code[:2]), int(loc_code[2:])

    SampleService().add_or_update_records([sample])
Example #2
0
    def test_get_all_samples_by_last_modified(self):
        d1_str = '202012300101' # dec 30th 2020
        d1 = datetime.strptime(d1_str, '%Y%m%d%H%M')
        s1_bar_code = '000000111-'+ d1_str +'-4321'

        d2_str = '202101010101' # Jan 1st 2021
        d2 = datetime.strptime(d2_str, '%Y%m%d%H%M')
        s2_bar_code = '000000111-'+ d2_str +'-4321'

        s1 = Sample(barcode=s1_bar_code,
                    location="4321",
                    date= datetime.now(),
                    last_modified=d1,
                    student_id="000000111",
                    email="*****@*****.**",
                    result_code="12345",
                    ivy_file="xxx",
                    email_notified=True,
                    text_notified=True)
        s2 = Sample(barcode=s2_bar_code,
                    location="4321",
                    date= datetime.now(),
                    last_modified=d2,
                    student_id="000000112",
                    email="*****@*****.**",
                    result_code="12345",
                    ivy_file="yyy",
                    email_notified=False,
                    text_notified=False)
        db.session.add(s1)
        db.session.add(s2)

        rv = self.app.get(f'/v1.0/sample', content_type="application/json",
                          headers={'X-CR-API-KEY': app.config.get('API_TOKEN')})
        data = json.loads(rv.get_data(as_text=True))
        self.assertEqual(2, len(data))

        last_modified_arg = d1.isoformat()
        rv = self.app.get(f'/v1.0/sample?last_modified={last_modified_arg}', content_type="application/json",
                          headers={'X-CR-API-KEY': app.config.get('API_TOKEN')})
        data = json.loads(rv.get_data(as_text=True))
        self.assertEqual(1, len(data))
        self.assertEqual(s2.barcode, data[0]['barcode'])

        last_modified_arg = d2.isoformat()
        rv = self.app.get(f'/v1.0/sample?last_modified={last_modified_arg}', content_type="application/json",
                          headers={'X-CR-API-KEY': app.config.get('API_TOKEN')})
        data = json.loads(rv.get_data(as_text=True))
        self.assertEqual(0, len(data))
Example #3
0
 def test_send_notification(self):
     message_count = len(TEST_MESSAGES)
     sample = Sample(email="*****@*****.**", result_code="1234")
     with NotificationService(app) as notifier:
         notifier.send_result_email(sample)
     self.assertEqual(len(TEST_MESSAGES), message_count + 1)
     self.assertEqual("UVA: BE SAFE Notification",
                      self.decode(TEST_MESSAGES[-1]['subject']))
Example #4
0
 def test_send_sms_notification_with_no_email(self):
     message_count = len(TEST_MESSAGES)
     sample = Sample(phone="540-457-0024", result_code="1234")
     with NotificationService(app) as notifier:
         notifier.send_result_sms(sample)
     self.assertEqual(len(TEST_MESSAGES), message_count + 1)
     self.assertEqual(
         "Dear Student, You have an important notification from UVA, "
         "please visit: https://besafe.virginia.edu/result-demo?code=1234. "
         "Reply 'STOP' to opt-out.", TEST_MESSAGES[-1])
Example #5
0
    def test_get_all_samples(self):
        s1 = Sample(barcode="000000111-202009091449-4321",
                    location="4321",
                    date= datetime.now(),
                    student_id="000000111",
                    email="*****@*****.**",
                    result_code="12345",
                    ivy_file="xxx",
                    email_notified=True,
                    text_notified=True)
        s2 = Sample(barcode="000000112-202009091449-4321",
                    location="4321",
                    date= datetime.now(),
                    student_id="000000112",
                    email="*****@*****.**",
                    result_code="12345",
                    ivy_file="yyy",
                    email_notified=False,
                    text_notified=False)
        db.session.add(s1)
        db.session.add(Notification(sample=s1, date="2020-12-09T14:49:00+0000", type="email", successful=True))
        db.session.add(Notification(sample=s1, date="2020-12-09T14:49:00+0000", type="text", successful=True))
        db.session.add(s2)

        rv = self.app.get('/v1.0/sample', content_type="application/json",
                          headers={'X-CR-API-KEY': app.config.get('API_TOKEN')})
        data = json.loads(rv.get_data(as_text=True))
        self.assertEqual(2, len(data))
        self.assertEqual("000000111-202009091449-4321", data[0]["barcode"])
        self.assertEqual(2, len(data[0]["notifications"]))
        self.assertEqual(True, data[0]['email_notified'])
        self.assertEqual(True, data[0]["notifications"][0]["successful"])

        self.assertEqual(0, len(data[1]["notifications"]))
        self.assertEqual(False, data[1]['email_notified'])

        print(data)
Example #6
0
 def test_notify_by_email_by_file_name(self):
     db.session.add(Sample(barcode="000000111-202009091449-4321",
                           location="4321",
                           date="2020-09-09T14:49:00+0000",
                           student_id="000000111",
                           email="*****@*****.**",
                           result_code="12345",
                           ivy_file="xxx"))
     db.session.add(Sample(barcode="000000112-202009091449-4321",
                           location="4321",
                           date="2020-09-09T14:49:00+0000",
                           student_id="000000112",
                           email="*****@*****.**",
                           result_code="12345",
                           ivy_file="yyy"))
     db.session.commit()
     admin._notify_by_email('xxx')
     samples = db.session.query(Sample).filter(Sample.email_notified == True).all()
     self.assertEqual(1, len(samples))
     samples = db.session.query(Sample).filter(Sample.email_notified != True).all()
     self.assertEqual(1, len(samples))
     admin._notify_by_email()
     samples = db.session.query(Sample).filter(Sample.email_notified == True).all()
     self.assertEqual(2, len(samples))
Example #7
0
 def test_populate_db(self):
     samples = db.session.query(Sample).all()
     self.assertEqual(0, len(samples))
     days = 7 * 5
     
     for day in daterange(date.today() - timedelta(days), date.today()):
         day_string = day.strftime("%d-%m-%y")
         bar_code = '000000111-' + day_string + '-5030'
         _sample = Sample(barcode=bar_code,
                 location= 50,
                 station= 20,
                 date=day,
                 created_on=day,
                 last_modified=datetime.datetime.now(),  # Note Modified date is later than created date.
                 student_id="000000111",
                 email="*****@*****.**",
                 result_code="12345",
                 ivy_file="xxx",
                 email_notified=True,
                 text_notified=True)
         db.session.add(_sample)
     db.session.commit()
     samples = db.session.query(Sample).all()
     self.assertNotEqual(0, len(samples))