Skip to content

Commit e475f54

Browse files
committed
Added ForeignKey test case & example, coverage == 100%
1 parent fd1414e commit e475f54

File tree

5 files changed

+64
-7
lines changed

5 files changed

+64
-7
lines changed

example/db.sqlite3

-4 KB
Binary file not shown.

example/example/admin.py

+8-2
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
from django.contrib import admin
22
from django import forms
33
from searchableselect.widgets import SearchableSelect
4-
from .models import Cat, Food
4+
from .models import Cat, Food, Person
55

66

77
class CatAdminForm(forms.ModelForm):
88
class Meta:
99
model = Cat
1010
exclude = ()
1111
widgets = {
12-
'favorite_foods': SearchableSelect(model='example.Food', search_field='name', many=True)
12+
'favorite_foods': SearchableSelect(model='example.Food', search_field='name', many=True),
13+
'owner': SearchableSelect(model='example.Person', search_field='name', many=False),
1314
}
1415

1516

@@ -21,5 +22,10 @@ class FoodAdmin(admin.ModelAdmin):
2122
pass
2223

2324

25+
class PersonAdmin(admin.ModelAdmin):
26+
pass
27+
28+
2429
admin.site.register(Cat, CatAdmin)
2530
admin.site.register(Food, FoodAdmin)
31+
admin.site.register(Person, PersonAdmin)

example/example/migrations/0001_initial.py

+14-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
# -*- coding: utf-8 -*-
2-
# Generated by Django 1.10.2 on 2016-10-28 14:52
2+
# Generated by Django 1.10.2 on 2016-10-30 16:15
33
from __future__ import unicode_literals
44

55
from django.db import migrations, models
6+
import django.db.models.deletion
67

78

89
class Migration(migrations.Migration):
@@ -27,9 +28,21 @@ class Migration(migrations.Migration):
2728
('name', models.CharField(max_length=64)),
2829
],
2930
),
31+
migrations.CreateModel(
32+
name='Person',
33+
fields=[
34+
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
35+
('name', models.CharField(max_length=64)),
36+
],
37+
),
3038
migrations.AddField(
3139
model_name='cat',
3240
name='favorite_foods',
3341
field=models.ManyToManyField(related_name='loved_by', to='example.Food'),
3442
),
43+
migrations.AddField(
44+
model_name='cat',
45+
name='owner',
46+
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='example.Person'),
47+
),
3548
]

example/example/models.py

+8
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
class Cat(models.Model):
55
name = models.CharField(max_length=64, null=False, blank=False)
66
favorite_foods = models.ManyToManyField('Food', related_name='loved_by')
7+
owner = models.ForeignKey('Person', null=False, blank=False)
78

89
def __unicode__(self):
910
return self.name
@@ -14,3 +15,10 @@ class Food(models.Model):
1415

1516
def __unicode__(self):
1617
return self.name
18+
19+
20+
class Person(models.Model):
21+
name = models.CharField(max_length=64, null=False, blank=False)
22+
23+
def __unicode__(self):
24+
return self.name

example/tests.py

+34-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from django import test
22
from django.test.utils import override_settings
33
from django.contrib.auth.models import User
4-
from example.models import Cat, Food
4+
from example.models import Cat, Food, Person
55
from selenium import webdriver
66
import selenium.webdriver.support.ui as ui
77
import time
@@ -32,6 +32,15 @@ def setUp(self):
3232
Food(name='Whiskas')
3333
])
3434

35+
Person.objects.bulk_create([
36+
Person(name='Andrew'),
37+
Person(name='David'),
38+
Person(name='Mary'),
39+
Person(name='Matthew'),
40+
Person(name='Mike'),
41+
Person(name='Victoria')
42+
])
43+
3544
@override_settings(DEBUG=True)
3645
def test_foo(self):
3746
self.selenium.get(self.live_server_url + '/admin/')
@@ -55,18 +64,38 @@ def select_food(text):
5564
field = self.selenium.find_element_by_id('id_favorite_foods')
5665
field.send_keys(text)
5766

58-
wait.until(lambda driver: driver.find_elements_by_class_name('tt-suggestion'))
67+
wait.until(lambda driver: driver.find_elements_by_css_selector('.field-favorite_foods .tt-suggestion'))
5968

60-
suggestions = self.selenium.find_elements_by_class_name('tt-suggestion')
69+
suggestions = self.selenium.find_elements_by_css_selector('.field-favorite_foods .tt-suggestion')
6170
suggestions[0].click()
6271

63-
wait.until(lambda driver: driver.find_elements_by_class_name('chip'))
72+
wait.until(lambda driver: driver.find_elements_by_css_selector('.field-favorite_foods .chip'))
73+
6474
# Wait for suggestion animation to finish
6575
time.sleep(0.5)
6676

6777
select_food('M')
6878
select_food('W')
6979

80+
# Select person
81+
82+
owner_field = self.selenium.find_element_by_id('id_owner')
83+
owner_field.send_keys('An')
84+
85+
wait.until(lambda driver: driver.find_elements_by_css_selector('.field-owner .tt-suggestion'))
86+
87+
owner = self.selenium.find_elements_by_css_selector('.field-owner .tt-suggestion')
88+
owner[0].click()
89+
90+
wait.until(lambda driver: driver.find_elements_by_css_selector('.field-owner .chip'))
91+
92+
# Wait for suggestion animation to finish
93+
time.sleep(0.5)
94+
95+
wait.until(lambda driver: driver.find_elements_by_class_name('tt-suggestion'))
96+
97+
# Save cat record
98+
7099
cat_name_input.submit()
71100

72101
wait.until(lambda driver: driver.find_elements_by_class_name('success'))
@@ -77,3 +106,4 @@ def select_food(text):
77106
self.assertEqual(favorite_foods.count(), 2)
78107
self.assertIn(favorite_foods[0].name, ('Milk', 'Meat'))
79108
self.assertEqual(favorite_foods[1].name, 'Whiskas')
109+
self.assertEqual(marusia.owner.name, 'Andrew')

0 commit comments

Comments
 (0)