summaryrefslogtreecommitdiffstats
path: root/glucometerutils/drivers/tests/test_otultra2.py
blob: 6b36602c00e867d7732ac7fd8d0ef7d84ea280ec (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# -*- coding: utf-8 -*-
#
# SPDX-License-Identifier: MIT
"""Tests for the LifeScan OneTouch Ultra 2 driver."""

# pylint: disable=protected-access,missing-docstring

from unittest import mock

from absl.testing import parameterized
from glucometerutils import exceptions
from glucometerutils.drivers import otultra2
from glucometerutils.support import lifescan


class TestOTUltra2(parameterized.TestCase):
    def test_checksum(self):
        checksum = otultra2._calculate_checksum(b"T")
        self.assertEqual(0x0054, checksum)

    def test_checksum_full(self):
        checksum = otultra2._calculate_checksum(b'T "SAT","08/03/13","22:12:00   "')
        self.assertEqual(0x0608, checksum)

    @parameterized.named_parameters(
        ("_missing_checksum", b"INVALID", lifescan.MissingChecksum),
        ("_short", b".\r", exceptions.InvalidResponse),
        ("_generic", b"% 2500\r", exceptions.InvalidResponse),
        (
            "_invalid_serial_number",
            b'@ "12345678O" 0297\r',
            lifescan.InvalidSerialNumber,
        ),
        ("_invalid_checksum", b"% 1337\r", exceptions.InvalidChecksum),
        ("_broken_checksum", b"% 13AZ\r", lifescan.MissingChecksum),
    )
    def test_invalid_response(self, returned_string, expected_exception):
        with mock.patch("serial.Serial") as mock_serial:
            mock_serial.return_value.readline.return_value = returned_string

            device = otultra2.Device("mockdevice")
            with self.assertRaises(expected_exception):
                device.get_serial_number()