def test_create_proposal(self): i = Issue(community=self.community, title="Issue ABC", created_by=self.chairmen[0]) i.full_clean() i.save() title = 'Proposal XYZ' content = 'hellow world' self.assertEquals(0, Proposal.objects.count()) self.login_chairmen() url = reverse('proposal_create', args=(self.community.id, i.id)) response = self.client.get(url) self.assertEquals(200, response.status_code) response = self.client.post(url, { 'proposal-type': ProposalType.RULE, 'proposal-title': title, 'proposal-content': content, 'proposal-tags': 'tag1,tag2,tag3', }) self.assertEquals(200, response.status_code) # Ajax call returns a partial html self.assertEquals(1, Proposal.objects.count()) p = Proposal.objects.all()[0] assert isinstance(p, Proposal) self.assertContains(response, p.get_absolute_url()) self.assertEquals(title, p.title) self.assertEquals(content, p.content)
def update_local_issue( gr_issue, id_namespace='', service_namespace='', ): """ :param gr_issue: GeoReportv2 Issue structure (as a dict) :param id_namespace: String to prepend to request identifiers :param service_namespace: String to prepend to service codes :return: The created/updated Issue and a `created` flag """ gr_issue = deepcopy(gr_issue) identifier = gr_issue.pop('service_request_id') if id_namespace: identifier = '%s:%s' % (id_namespace, identifier) issue = Issue.objects.filter(identifier=identifier).first() if not issue: issue = Issue(identifier=identifier) created = True else: created = False for field in Issue._meta.get_fields(): if field.name in gr_issue: value = gr_issue.pop(field.name) if isinstance(field, DateTimeField): value = parse_date(value) setattr(issue, field.attname, value) if "long" in gr_issue and "lat" in gr_issue: issue.location = GEOSGeometry( 'SRID=4326;POINT(%s %s)' % (gr_issue.pop('long'), gr_issue.pop('lat'))) if 'service_code' in gr_issue: gr_issue['service_code'] = '%s%s' % (service_namespace, gr_issue['service_code']) # This has no direct mapping in our schema, but it can be used by implicit autocreation of services issue.service_name = gr_issue.pop('service_name', None) issue._cache_data() issue.full_clean() issue.save() extended_attributes = gr_issue.pop('extended_attributes', {}) for ex_class in get_extensions(): ex = ex_class() ex.parse_extended_attributes(issue, extended_attributes) if gr_issue: print(gr_issue) issue.source = gr_issue return (issue, created)
def test_vote_proposal(self): # p = self.test_create_proposal() ###################################### i = Issue(community=self.community, title="Issue ABC", created_by=self.chairmen[0]) i.full_clean() i.save() title = 'Proposal XYZ' content = 'hellow world' p = Proposal.objects.create(type=ProposalType.RULE, issue=i, created_by=self.chairmen[0], title=title, content=content) ###################################### #TODO: create this via HTML request pv = ProposalVote(proposal=p, user=self.members[0], value=ProposalVoteValue.CON) pv.full_clean() pv.save() return pv
def mkissue(value: str): model = IssueModel(area=value.split("__")[0], value=value) model.full_clean(exclude=["user"]) return model