from django.test import TestCase from django.contrib.auth.models import User from interface.models import Ensemble, Project from . import models class IntegrationTestCase(TestCase): def setUp(self): self.homer = User.objects.create(username='homer') self.ned = User.objects.create(username="ned") self.lisa = User.objects.create(username="lisa") self.dewey = User.objects.create(username="dewey") self.be_sharps = self.homer.ensembles.create(name='Be Sharps', code="barbershop") self.sesd = self.dewey.ensembles.create(name="Springfield Elementary School Band", code="sax") self.sel = self.lisa.collections.create(name="Springfield Elementary Library") self.flanders = self.ned.collections.create(name="Neds Shed") def test_integration(self): pass def test_movement_from_large_work(self): ''' Will be common to store a work which has several movements, but the project is only going to play one. This also should give us the ability to store an anthology as one Work have Project reference 'no:23' ''' work = self.sel.works.create(name="Some Quartet", composer="Beethoven") for g in ('vl1', 'vl2', 'vla', 'vc'): doc = work.docs.create(upload=f'sel/beethoven/some_quartet/some_quartet_{g}.pdf') doc.sections.create(tag='mvmt:1', start=1, end=3) doc.sections.create(tag='mvmt:2', start=4, end=8) doc.sections.create(tag='mvmt:3', start=9, end=12) doc.sections.create(tag=f'inst:{g}') # no tags - get nothing (should it be everything?) self.assertEqual(work.extract(), []) # single tag - should get just that range self.assertEqual(work.extract('inst:vl1'), [('sel/beethoven/some_quartet/some_quartet_vl1.pdf', None, None)]) # single tag - returns all documents with that range result = work.extract('mvmt:2') self.assertEqual(len(result), 4) # multiple tags - returns the overlapping portion of all documents that have all tags self.assertEqual(work.extract('inst:vl1', 'mvmt:2'), [('sel/beethoven/some_quartet/some_quartet_vl1.pdf', 4, 8)]) self.assertEqual(work.extract('inst:vl1', 'inst:vl2'), [])