Passed
Push — master ( b7ec87...174f4e )
by Alexander
02:09
created

TestVersionCreatePermissions.verify_api_without_permission()   A

Complexity

Conditions 2

Size

Total Lines 5
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 5
dl 0
loc 5
rs 10
c 0
b 0
f 0
cc 2
nop 1
1
# -*- coding: utf-8 -*-
2
# pylint: disable=attribute-defined-outside-init, invalid-name, avoid-list-comprehension
3
4
from xmlrpc.client import Fault as XmlRPCFault
5
from xmlrpc.client import ProtocolError
6
7
from django.test import override_settings
8
9
from tcms.rpc.tests.utils import APITestCase, APIPermissionsTestCase
10
from tcms.tests.factories import ProductFactory, VersionFactory
11
12
13
class TestFilterVersions(APITestCase):
14
15
    def _fixture_setup(self):
16
        super(TestFilterVersions, self)._fixture_setup()
17
18
        self.product = ProductFactory(name='StarCraft')
19
        self.version = VersionFactory(value='0.7', product=self.product)
20
21
    def test_filter_by_version_id(self):
22
        ver = self.rpc_client.Version.filter({'id': self.version.pk})
23
        self.assertIsNotNone(ver)
24
        self.assertEqual(ver[0]['value'], "0.7")
25
26
    def test_filter_by_product_id(self):
27
        versions = self.rpc_client.Version.filter({'product_id': self.product.pk})
28
        self.assertIsInstance(versions, list)
29
        versions = [version['value'] for version in versions]
30
        self.assertEqual(2, len(versions))
31
        self.assertIn('0.7', versions)
32
        self.assertIn('unspecified', versions)
33
34
    def test_filter_by_name(self):
35
        ver = self.rpc_client.Version.filter({'value': '0.7'})
36
        self.assertIsNotNone(ver)
37
        self.assertEqual(ver[0]['value'], "0.7")
38
39
40
@override_settings(LANGUAGE_CODE='en')
41
class TestVersionCreateFunctionality(APITestCase):
42
43
    def _fixture_setup(self):
44
        super()._fixture_setup()
45
46
        self.product_name = 'StarCraft'
47
        self.product = ProductFactory(name=self.product_name)
48
49
    def test_add_version_with_product_id(self):
50
        prod = self.rpc_client.Version.create({
51
            "product": self.product.pk,
52
            "value": "New Version 1"
53
        })
54
        self.assertEqual(prod['value'], "New Version 1")
55
        self.assertEqual(prod['product_id'], self.product.pk)
56
57
    def test_add_version_with_product_name(self):
58
        new_version = 'New Version 2'
59
        prod = self.rpc_client.Version.create({
60
            'product': self.product_name,
61
            'value': new_version,
62
        })
63
        self.assertEqual(prod['value'], new_version)
64
        self.assertEqual(prod['product_id'], self.product.pk)
65
66
    def test_add_version_with_non_exist_prod(self):
67
        with self.assertRaisesRegex(XmlRPCFault, 'Product matching query does not exist'):
68
            self.rpc_client.Version.create({
69
                "product": -9,
70
                "value": "0.1"
71
            })
72
73
    def test_add_version_with_missing_argument(self):
74
        with self.assertRaisesRegex(XmlRPCFault, "Internal error:.*value.*This field is required"):
75
            self.rpc_client.Version.create({"product": self.product.pk})
76
77
        with self.assertRaisesRegex(XmlRPCFault, 'No product given'):
78
            self.rpc_client.Version.create({"value": "0.1"})
79
80
    def test_add_version_with_extra_unrecognized_field(self):
81
        new_version = self.rpc_client.Version.create({
82
            'product': self.product.pk,
83
            'value': 'New version',
84
            'extra-data-field': 'Extra value that is not expected',
85
        })
86
        self.assertEqual(self.product.pk, new_version['product_id'])
87
        self.assertEqual(self.product.name, new_version['product'])
88
        self.assertEqual('New version', new_version['value'])
89
90
91
class TestVersionCreatePermissions(APIPermissionsTestCase):
92
    permission_label = 'management.add_version'
93
94
    def _fixture_setup(self):
95
        super()._fixture_setup()
96
        self.product = ProductFactory()
97
98
    def verify_api_with_permission(self):
99
        result = self.rpc_client.Version.create({
100
            "product": self.product.pk,
101
            "value": "Version with Permissions"
102
        })
103
        self.assertEqual(result['value'], "Version with Permissions")
104
        self.assertEqual(result['product_id'], self.product.pk)
105
106
    def verify_api_without_permission(self):
107
        with self.assertRaisesRegex(ProtocolError, '403 Forbidden'):
108
            self.rpc_client.Version.create({
109
                "product": self.product.pk,
110
                "value": "Version without Permissions"
111
            })
112