1
# Copyright 2014 Canonical Ltd. This software is licensed under the
2
# GNU Affero General Public License version 3 (see the file LICENSE).
4
"""Tests for `InstanceListField`."""
6
from __future__ import (
17
from django.core.exceptions import ValidationError
18
from maasserver.forms import InstanceListField
19
from maasserver.models import Node
20
from maasserver.testing.factory import factory
21
from maasserver.testing.testcase import MAASServerTestCase
24
class TestInstanceListField(MAASServerTestCase):
25
"""Tests for `InstanceListField`."""
27
def test_field_validates_valid_data(self):
28
nodes = [factory.make_Node() for _ in range(3)]
30
[factory.make_Node() for _ in range(3)]
31
field = InstanceListField(model_class=Node, field_name='system_id')
32
input_data = [node.system_id for node in nodes]
33
self.assertItemsEqual(
35
[node.system_id for node in field.clean(input_data)])
37
def test_field_ignores_duplicates(self):
38
nodes = [factory.make_Node() for _ in range(2)]
40
[factory.make_Node() for _ in range(3)]
41
field = InstanceListField(model_class=Node, field_name='system_id')
42
input_data = [node.system_id for node in nodes] * 2
43
self.assertItemsEqual(
45
[node.system_id for node in field.clean(input_data)])
47
def test_field_rejects_invalid_data(self):
48
nodes = [factory.make_Node() for _ in range(3)]
49
field = InstanceListField(model_class=Node, field_name='system_id')
50
error = self.assertRaises(
52
field.clean, [node.system_id for node in nodes] + ['unknown'])
53
self.assertEquals(['Unknown node(s): unknown.'], error.messages)