def test_delete(self): # assign some product to the new program self.products[0].program_id = self.new_program._id self.products[0].save() # make sure start state is okay self.assertEqual( 2, len(Program.by_domain(self.domain.name)) ) self.assertEqual( 2, Product.by_program_id(self.domain.name, self.default_program._id).count() ) self.assertEqual( 1, Product.by_program_id(self.domain.name, self.new_program._id).count() ) self.assertEqual( self.new_program._id, self.products[0].program_id ) self.assertEqual( self.new_program._id, SQLProduct.objects.get(product_id=self.products[0]._id).program_id ) # stash the id before we delete new_program_id = self.new_program._id self.new_program.delete() with self.assertRaises(ResourceNotFound): Program.get(new_program_id) self.assertEqual( 1, len(Program.by_domain(self.domain.name)) ) self.assertEqual( 3, Product.by_program_id(self.domain.name, self.default_program._id).count() ) self.assertEqual( self.default_program._id, Product.get(self.products[0]._id).program_id ) self.assertEqual( self.default_program._id, SQLProduct.objects.get(product_id=self.products[0]._id).program_id )
def __init__(self, product, *args, **kwargs): self.product = product kwargs["initial"] = self.product._doc kwargs["initial"]["code"] = self.product.code super(ProductForm, self).__init__(*args, **kwargs) programs = Program.by_domain(self.product.domain, wrap=False) self.fields["program_id"].choices = tuple((prog["_id"], prog["name"]) for prog in programs)
def handle(self, *args, **options): self.stdout.write("Fixing default programs...\n") for domain in Domain.get_all(): if not domain.commtrack_enabled: continue if Program.default_for_domain(domain.name): continue programs = Program.by_domain(domain.name) # filter anything named 'default' or 'Default' current_default = [ p for p in programs if p.name == 'Default' or p.name == 'default' ] # if they never changed their default programs # name, we don't want to add a confusing new one # so just flip this to the default if len(current_default) == 1: p.default = True p.save() else: get_or_create_default_program(domain.name)
def __init__(self, product, *args, **kwargs): self.product = product kwargs['initial'] = self.product._doc kwargs['initial']['code'] = self.product.code super(ProductForm, self).__init__(*args, **kwargs) programs = Program.by_domain(self.product.domain, wrap=False) self.fields['program_id'].choices = tuple((prog['_id'], prog['name']) for prog in programs)
def test_program_fixture(self): user = bootstrap_user(self, phone_number="1234567890") Program( domain=user.domain, name="test1", code="t1" ).save() program_list = Program.by_domain(user.domain) program_xml = '' for program in program_list: program_xml += ''' <program id="{id}"> <name>{name}</name> <code>{code}</code> </program> '''.format( id=program.get_id, name=program.name, code=program.code ) fixture = program_fixture_generator(user, V1, None) self.assertXmlEqual('''<fixture id="commtrack:programs" user_id="{user_id}"> <programs> {programs} </programs> </fixture>'''.format(user_id=user.user_id, programs=program_xml), ElementTree.tostring(fixture[0]))
def program_data(self): data = [] programs = Program.by_domain(self.domain) for p in programs: info = p._doc info['edit_url'] = reverse('commtrack_program_edit', kwargs={'domain': self.domain, 'prog_id': p._id}) data.append(info) return data
def setUp(self): super(ProgramsTest, self).setUp() self.default_program = Program.by_domain(self.domain.name, wrap=True).one() self.new_program = make_program( self.domain.name, 'new program', 'newprogram' )
def clean_name(self): name = self.cleaned_data['name'] other_programs = [p for p in Program.by_domain(self.program.domain) if p._id != self.program._id] if name in [p.name for p in other_programs]: raise forms.ValidationError(_('Name already in use')) return name
def update_params(self): self.selected = self.request.GET.get('program') user = WebUser.get_by_username(str(self.request.user)) if not self.selected and self.selected != '': self.selected = user.program_id self.programs = Program.by_domain(self.domain) opts = [dict(val=program.get_id, text=program.name) for program in self.programs] self.options = opts
def update_params(self): self.selected = self.request.GET.get('program') user = WebUser.get_by_username(str(self.request.user)) if not self.selected and \ self.selected != '' and \ user.get_domain_membership(self.domain): self.selected = user.get_domain_membership(self.domain).program_id self.programs = Program.by_domain(self.domain) opts = [dict(val=program.get_id, text=program.name) for program in self.programs] self.options = opts
def __init__(self, *args, **kwargs): domain = None if 'domain' in kwargs: domain = kwargs['domain'] del kwargs['domain'] super(CommtrackUserForm, self).__init__(*args, **kwargs) self.fields['supply_point'].widget = SupplyPointSelectWidget(domain=domain) programs = Program.by_domain(domain, wrap=False) choices = list((prog['_id'], prog['name']) for prog in programs) choices.insert(0, ('', '')) self.fields['program_id'].choices = choices
def clean_name(self): name = self.cleaned_data['name'] other_program_names = [ p['name'] for p in Program.by_domain(self.program.domain, wrap=False) if p['_id'] != self.program._id ] if name in other_program_names: raise forms.ValidationError(_('Name already in use')) return name
def __init__(self, data=None, excluded_emails=None, *args, **kwargs): domain = None if 'domain' in kwargs: domain = Domain.get_by_name(kwargs['domain']) del kwargs['domain'] super(AdminInvitesUserForm, self).__init__(data=data, *args, **kwargs) if domain and domain.commtrack_enabled: self.fields['supply_point'] = forms.CharField(label='Supply Point:', required=False, widget=SupplyPointSelectWidget(domain=domain.name)) self.fields['program'] = forms.ChoiceField(label="Program", choices=(), required=False) programs = Program.by_domain(domain.name, wrap=False) choices = list((prog['_id'], prog['name']) for prog in programs) choices.insert(0, ('', '')) self.fields['program'].choices = choices self.excluded_emails = excluded_emails or []
def __init__(self, data=None, excluded_emails=None, *args, **kwargs): domain = None if "domain" in kwargs: domain = Domain.get_by_name(kwargs["domain"]) del kwargs["domain"] super(AdminInvitesUserForm, self).__init__(data=data, *args, **kwargs) if domain and domain.commtrack_enabled: self.fields["supply_point"] = forms.CharField( label="Supply Point:", required=False, widget=SupplyPointSelectWidget(domain=domain.name) ) self.fields["program"] = forms.ChoiceField(label="Program", choices=(), required=False) programs = Program.by_domain(domain.name, wrap=False) choices = list((prog["_id"], prog["name"]) for prog in programs) choices.insert(0, ("", "")) self.fields["program"].choices = choices self.excluded_emails = excluded_emails or []
def __init__(self, *args, **kwargs): domain = None if "domain" in kwargs: domain = kwargs["domain"] del kwargs["domain"] if "is_admin" in kwargs: attrs = {"is_admin": kwargs["is_admin"]} del kwargs["is_admin"] else: attrs = {"is_admin": False} super(CommtrackUserForm, self).__init__(*args, **kwargs) self.fields["supply_point"].widget = SupplyPointSelectWidget(domain=domain, attrs=attrs) programs = Program.by_domain(domain, wrap=False) choices = list((prog["_id"], prog["name"]) for prog in programs) choices.insert(0, ("", "")) self.fields["program_id"].choices = choices
def __init__(self, *args, **kwargs): domain = None if 'domain' in kwargs: domain = kwargs['domain'] del kwargs['domain'] if 'is_admin' in kwargs: attrs = {'is_admin': kwargs['is_admin']} del kwargs['is_admin'] else: attrs = {'is_admin': False} super(CommtrackUserForm, self).__init__(*args, **kwargs) self.fields['supply_point'].widget = SupplyPointSelectWidget(domain=domain, attrs=attrs) programs = Program.by_domain(domain, wrap=False) choices = list((prog['_id'], prog['name']) for prog in programs) choices.insert(0, ('', '')) self.fields['program_id'].choices = choices
def test_program_fixture(self): user = bootstrap_user(self, phone_number="1234567890") Program( domain=user.domain, name="test1", code="t1" ).save() program_list = Program.by_domain(user.domain) program_xml = self.generate_program_xml(program_list, user) fixture = program_fixture_generator(user, V1, None) self.assertXmlEqual( program_xml, ElementTree.tostring(fixture[0]) )
def __init__(self, product, *args, **kwargs): self.product = product kwargs['initial'] = self.product._doc kwargs['initial']['code'] = self.product.code super(ProductForm, self).__init__(*args, **kwargs) programs = Program.by_domain(self.product.domain, wrap=False) self.fields['program_id'].choices = tuple((prog['_id'], prog['name']) for prog in programs) # make sure to select default program if # this is a new product if not product._id: self.initial['program_id'] = Program.default_for_domain( self.product.domain )._id
def test_program_fixture(self): user = bootstrap_user(self, phone_number="1234567890") Program( domain=user.domain, name="test1", code="t1" ).save() program_list = Program.by_domain(user.domain) program_xml = self.generate_program_xml(program_list, user) fixture = program_fixture_generator(user, V1, None, None) self.assertXmlEqual( program_xml, ElementTree.tostring(fixture[0]) )
def __init__(self, data=None, excluded_emails=None, *args, **kwargs): domain = None if 'domain' in kwargs: domain = Domain.get_by_name(kwargs['domain']) del kwargs['domain'] super(AdminInvitesUserForm, self).__init__(data=data, *args, **kwargs) if domain and domain.commtrack_enabled: self.fields['supply_point'] = forms.CharField( label='Supply Point:', required=False, widget=SupplyPointSelectWidget(domain=domain.name)) self.fields['program'] = forms.ChoiceField(label="Program", choices=(), required=False) programs = Program.by_domain(domain.name, wrap=False) choices = list((prog['_id'], prog['name']) for prog in programs) choices.insert(0, ('', '')) self.fields['program'].choices = choices self.excluded_emails = excluded_emails or []
def test_program_fixture(self): user = bootstrap_user(self, phone_number="1234567890") Program(domain=user.domain, name="test1", code="t1").save() program_list = Program.by_domain(user.domain) program_xml = '' for program in program_list: program_xml += ''' <program id="{id}"> <name>{name}</name> <code>{code}</code> </program> '''.format(id=program.get_id, name=program.name, code=program.code) fixture = program_fixture_generator(user, V1, None) self.assertXmlEqual( '''<fixture id="commtrack:programs" user_id="{user_id}"> <programs> {programs} </programs> </fixture>'''.format(user_id=user.user_id, programs=program_xml), ElementTree.tostring(fixture[0]))
def test_selective_program_sync(self): user = bootstrap_user(self, phone_number="1234567890") Program( domain=user.domain, name="test1", code="t1" ).save() program_list = Program.by_domain(user.domain) program_xml = self.generate_program_xml(program_list, user) fixture_original = program_fixture_generator(user, V1, None, None) generate_restore_payload(user.to_casexml_user()) self.assertXmlEqual( program_xml, ElementTree.tostring(fixture_original[0]) ) first_sync = sorted(SyncLog.view( "phone/sync_logs_by_user", include_docs=True, reduce=False ).all(), key=lambda x: x.date)[-1] # make sure the time stamp on this first sync is # not on the same second that the programs were created first_sync.date += datetime.timedelta(seconds=1) # second sync is before any changes are made, so there should # be no programs synced fixture_pre_change = program_fixture_generator(user, V1, None, first_sync) generate_restore_payload(user.to_casexml_user()) self.assertEqual( [], fixture_pre_change, "Fixture was not empty on second sync" ) second_sync = sorted(SyncLog.view( "phone/sync_logs_by_user", include_docs=True, reduce=False ).all(), key=lambda x: x.date)[-1] self.assertTrue(first_sync._id != second_sync._id) # save should make the program more recently updated than the # last sync for program in program_list: program.save() # now that we've updated a program, we should get # program data in sync again fixture_post_change = program_fixture_generator(user, V1, None, second_sync) # regenerate the fixture xml to make sure it is still legit self.assertXmlEqual( program_xml, ElementTree.tostring(fixture_post_change[0]) )
def test_selective_program_sync(self): user = bootstrap_user(self, phone_number="1234567890") Program( domain=user.domain, name="test1", code="t1" ).save() program_list = Program.by_domain(user.domain) program_xml = self.generate_program_xml(program_list, user) fixture_original = program_fixture_generator(user, V1, None) generate_restore_payload(user.to_casexml_user()) self.assertXmlEqual( program_xml, ElementTree.tostring(fixture_original[0]) ) first_sync = sorted(SyncLog.view( "phone/sync_logs_by_user", include_docs=True, reduce=False ).all(), key=lambda x: x.date)[-1] # make sure the time stamp on this first sync is # not on the same second that the programs were created first_sync.date += datetime.timedelta(seconds=1) # second sync is before any changes are made, so there should # be no programs synced fixture_pre_change = program_fixture_generator(user, V1, first_sync) generate_restore_payload(user.to_casexml_user()) self.assertEqual( [], fixture_pre_change, "Fixture was not empty on second sync" ) second_sync = sorted(SyncLog.view( "phone/sync_logs_by_user", include_docs=True, reduce=False ).all(), key=lambda x: x.date)[-1] self.assertTrue(first_sync._id != second_sync._id) # save should make the program more recently updated than the # last sync for program in program_list: program.save() # now that we've updated a program, we should get # program data in sync again fixture_post_change = program_fixture_generator(user, V1, second_sync) # regenerate the fixture xml to make sure it is still legit self.assertXmlEqual( program_xml, ElementTree.tostring(fixture_post_change[0]) )
def get_or_make_def_program(domain): program = [p for p in Program.by_domain(domain) if p.name == "Default"] if len(program) == 0: return make_program(domain, 'Default', 'def') else: return program[0]
def get_or_make_def_program(domain): program = [p for p in Program.by_domain(domain) if p.name == "Default"] if len(program) == 0: return make_program(domain, "Default", "def") else: return program[0]