def test_multiple_m2m_relations(self): band_fixture = Fixture(Band) band_fixture.add(1, name="Nuns N' Hoses") band_fixture.add(2, name='Led Dirigible') roadie_fixture = Fixture(Roadie) roadie_fixture.add(1, name='Marshall Amp', hauls_for=[band_fixture.m2m(1), band_fixture.m2m(2)]) band_fixture.load() roadie_fixture.load() self.assertEqual(Band.objects.count(), 2) self.assertEqual(Roadie.objects.count(), 1) self.assertEqual(Roadie.objects.get(name='Marshall Amp').hauls_for.count(), 2) self.assertEqual(Band.objects.get(name="Nuns N' Hoses").roadie_set.count(), 1) self.assertEqual(Band.objects.get(name='Led Dirigible').roadie_set.count(), 1)
def test_m2m_dependent_first(self): # The above FK tests already apply to explicit "through" M2Ms, so this # only tests normal, "non-through" ones. band_fixture = Fixture(Band) band_fixture.add(1, name="Nuns N' Hoses") band_fixture.add(2, name='Led Dirigible') roadie_fixture = Fixture(Roadie) roadie_fixture.add(1, name='Marshall Amp', hauls_for=[band_fixture.m2m(1), band_fixture.m2m(2)]) # M2M relations are two-way, but like only one end has the # ManyToManyField, the fixture dependency is also defined in one end # of the relation. roadie_fixture is the dependent here, load it first # to test proper dependency resolution. roadie_fixture.load() self.assertEqual(Band.objects.count(), 2) self.assertEqual(Roadie.objects.count(), 1) self.assertEqual(Roadie.objects.get(name='Marshall Amp').hauls_for.count(), 2) self.assertEqual(Band.objects.get(name="Nuns N' Hoses").roadie_set.count(), 1) self.assertEqual(Band.objects.get(name='Led Dirigible').roadie_set.count(), 1)
def test_reverse_single_m2m_relation(self): roadie_fixture = Fixture(Roadie) roadie_fixture.add(1, name='Marshall Amp') band_fixture = Fixture(Band) band_fixture.add(1, name="Nuns N' Hoses", roadie_set=[roadie_fixture.m2m(1)]) roadie_fixture.load() band_fixture.load() self.assertEqual(Band.objects.count(), 1) self.assertEqual(Roadie.objects.count(), 1) self.assertEqual(Roadie.objects.get(name='Marshall Amp').hauls_for.filter(name="Nuns N' Hoses").count(), 1) self.assertEqual(Band.objects.get(name="Nuns N' Hoses").roadie_set.filter(name='Marshall Amp').count(), 1)
def test_alternate_database(self): """ Explicitly assign fixtures to a non-default database. """ if self.do_tests: band_fixture = Fixture(Band) band_fixture.add(1, name="Nuns N' Hoses") band_fixture.add(2, name='Led Dirigible') roadie_fixture = Fixture(Roadie) roadie_fixture.add(1, name='Marshall Amp', hauls_for=[band_fixture.m2m(1), band_fixture.m2m(2)]) call_command('loaddata', band_fixture, roadie_fixture, database='alternate', verbosity=0) self.assertEqual(Band.objects.using('alternate').count(), 2) self.assertEqual(Roadie.objects.using('alternate').count(), 1) self.assertEqual(Band.objects.count(), 0) self.assertEqual(Roadie.objects.count(), 0) self.assertEqual(Roadie.objects.using('alternate').get(name='Marshall Amp').hauls_for.count(), 2) self.assertEqual(Band.objects.using('alternate').get(name="Nuns N' Hoses").roadie_set.count(), 1) self.assertEqual(Band.objects.using('alternate').get(name='Led Dirigible').roadie_set.count(), 1)
# Keyword-based FK target lookup membership_fixture.add( 7, musician=musician_fixture.fk(6), band=band_fixture.fk(5), date_joined="2000-04-01", instrument="All of them" ) # Relation token -based FK target lookup membership_fixture.add( 8, musician=musician_fixture.fk(5), band=metalband_fixture.fk(6), date_joined="1982-03-03", instrument="Guitarrrr-ahh", ) # Single M2M addition with a kwarg roadie_fixture.add(3, name="Tats Brimhat", hauls_for=[band_fixture.m2m(5)]) # Two M2M additions with a list of kwargs roadie_fixture.add(4, name="Blackie Teeshirt", hauls_for=[band_fixture.m2m(5), metalband_fixture.m2m(6)]) # Single M2M addition with a relation token roadie_fixture.add(5, name="Ciggy Tardust", hauls_for=[metalband_fixture.m2m(6)]) company_fixture = Fixture(Company) employee_fixture = Fixture(Employee) employee_history_fixture = Fixture(EmployeeHistory) company_fixture.add(2, name="FacelessCorp Inc.") # Normal FK relationship to another model employee_fixture.add(3, name="Ty Rant", company=company_fixture.fk(2))
def test_non_iterable_m2m_definition(self): band_fixture = Fixture(Band) band_fixture.add(1, name="Nuns N' Hoses") roadie_fixture = Fixture(Roadie) # hauls_for requires a one-item iterable self.assertRaises(FixtureUsageError, roadie_fixture.add, 1, name='Marshall Amp', hauls_for=band_fixture.m2m(1))