# -*- coding: utf-8 -*-
# Copyright 2017 LasLabs Inc.
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).

from odoo.exceptions import UserError, ValidationError

from .common import Common


class TestExternalSystem(Common):

    def setUp(self):
        super(TestExternalSystem, self).setUp()
        self.record = self.env.ref('base_external_system.external_system_os')

    def test_get_system_types(self):
        """It should return at least the test record's interface."""
        self.assertIn(
            (self.record._name, self.record._description),
            self.env['external.system']._get_system_types(),
        )

    def test_check_fingerprint_blank(self):
        """It should not allow blank fingerprints when checking enabled."""
        with self.assertRaises(ValidationError):
            self.record.write({
                'ignore_fingerprint': False,
                'fingerprint': False,
            })

    def test_check_fingerprint_allowed(self):
        """It should not raise a validation error if there is a fingerprint."""
        self.record.write({
            'ignore_fingerprint': False,
            'fingerprint': 'Data',
        })
        self.assertTrue(True)

    def test_client(self):
        """It should yield the open interface client."""
        with self._mock_method('client', self.record) as magic:
            with self.record.system_id.client() as client:
                self.assertEqual(client, magic().__enter__())

    def test_create_creates_and_assigns_interface(self):
        """It should create and assign the interface on record create."""
        self.assertEqual(
            self.record.interface._name, 'external.system.os',
        )

    def test_action_test_connection(self):
        """It should proxy to the interface connection tester."""
        with self.assertRaises(UserError):
            self.record.system_id.action_test_connection()