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))