from __future__ import unicode_literals from operator import attrgetter from django.apps.registry import Apps from django.db import models from django.test import TestCase from .base_tests import BaseOrderWithRespectToTests from .models import Answer, Dimension, Entity, Post, Question class OrderWithRespectToBaseTests(BaseOrderWithRespectToTests, TestCase): Answer = Answer Post = Post Question = Question class OrderWithRespectToTests(TestCase): def test_duplicate_order_field(self): test_apps = Apps(['order_with_respect_to']) class Bar(models.Model): class Meta: apps = test_apps app_label = 'order_with_respect_to' class Foo(models.Model): bar = models.ForeignKey(Bar, models.CASCADE) order = models.OrderWrt() class Meta: order_with_respect_to = 'bar' apps = test_apps app_label = 'order_with_respect_to' count = 0 for field in Foo._meta.local_fields: if isinstance(field, models.OrderWrt): count += 1 self.assertEqual(count, 1) class TestOrderWithRespectToOneToOnePK(TestCase): def test_set_order(self): e = Entity.objects.create() d = Dimension.objects.create(entity=e) c1 = d.component_set.create() c2 = d.component_set.create() d.set_component_order([c1.id, c2.id]) self.assertQuerysetEqual(d.component_set.all(), [c1.id, c2.id], attrgetter('pk'))