def test_toggle_badge_off(self): ps_badge = OrganizationBadge(kind=PUBLIC_SERVICE) certified_badge = OrganizationBadge(kind=CERTIFIED) org = OrganizationFactory(badges=[ps_badge, certified_badge]) toggle(str(org.id), PUBLIC_SERVICE) org.reload() self.assertEqual(org.badges[0].kind, CERTIFIED)
def test_organizations_csv(self): with self.autoindex(): orgs = [OrganizationFactory() for _ in range(5)] hidden_org = OrganizationFactory(deleted=datetime.now()) response = self.get(url_for('site.organizations_csv')) self.assert200(response) self.assertEqual(response.mimetype, 'text/csv') self.assertEqual(response.charset, 'utf-8') csvfile = StringIO.StringIO(response.data) reader = csv.get_reader(csvfile) header = reader.next() self.assertEqual(header[0], 'id') self.assertIn('name', header) self.assertIn('description', header) self.assertIn('created_at', header) self.assertIn('last_modified', header) self.assertIn('metric.datasets', header) rows = list(reader) ids = [row[0] for row in rows] self.assertEqual(len(rows), len(orgs)) for org in orgs: self.assertIn(str(org.id), ids) self.assertNotIn(str(hidden_org.id), ids)
def test_toggle_badge_off(self): ps_badge = OrganizationBadge(kind=PUBLIC_SERVICE) certified_badge = OrganizationBadge(kind=CERTIFIED) org = OrganizationFactory(badges=[ps_badge, certified_badge]) toggle(str(org.id), PUBLIC_SERVICE) org.reload() self.assertEqual(org.badges[0].kind, CERTIFIED)
def test_public_services(self): ps_badge = Badge(kind=PUBLIC_SERVICE) public_services = [ OrganizationFactory(badges=[ps_badge]) for _ in range(2) ] for _ in range(3): OrganizationFactory() self.assertEqual(PublicServicesMetric().get_value(), len(public_services))
def test_my_org_issues(self): user = self.login() member = Member(user=user, role='editor') organization = OrganizationFactory(members=[member]) reuse = ReuseFactory(owner=user) org_reuse = ReuseFactory(organization=organization) dataset = VisibleDatasetFactory(owner=user) org_dataset = VisibleDatasetFactory(organization=organization) issues = [ DatasetIssue.objects.create(subject=dataset, title='', user=user), DatasetIssue.objects.create(subject=org_dataset, title='', user=user), ReuseIssue.objects.create(subject=reuse, title='', user=user), ReuseIssue.objects.create(subject=org_reuse, title='', user=user), ] # Should not be listed DatasetIssue.objects.create(subject=VisibleDatasetFactory(), title='', user=user) ReuseIssue.objects.create(subject=ReuseFactory(), title='', user=user) response = self.get(url_for('api.my_org_issues')) self.assert200(response) self.assertEqual(len(response.json), len(issues))
def test_my_org_discussions_with_search(self): user = self.login() member = Member(user=user, role='editor') organization = OrganizationFactory(members=[member]) reuse = ReuseFactory(owner=user) org_reuse = ReuseFactory(organization=organization) dataset = VisibleDatasetFactory(owner=user) org_dataset = VisibleDatasetFactory(organization=organization) discussions = [ DatasetDiscussion.objects.create(subject=dataset, title='foo', user=user), ReuseDiscussion.objects.create(subject=org_reuse, title='foo', user=user), ] # Should not be listed. ReuseDiscussion.objects.create(subject=reuse, title='', user=user), DatasetDiscussion.objects.create(subject=org_dataset, title='', user=user), # Should really not be listed. DatasetDiscussion.objects.create(subject=VisibleDatasetFactory(), title='foo', user=user) ReuseDiscussion.objects.create(subject=ReuseFactory(), title='foo', user=user) response = self.get(url_for('api.my_org_discussions'), qs={'q': 'foo'}) self.assert200(response) self.assertEqual(len(response.json), len(discussions))
def test_with_other_datasets_and_pertinent_ones(self): user = self.login() with self.autoindex(): member = Member(user=user, role='admin') organization = OrganizationFactory(members=[member]) for _ in range(3): VisibleDatasetFactory( organization=organization, spatial=SpatialCoverageFactory(zones=[self.arles.id])) response = self.client.get( url_for('territories.territory', territory=self.arles)) self.assert200(response) data = response.data.decode('utf-8') self.assertIn('Arles', data) territory_datasets = self.get_context_variable('territory_datasets') self.assertEqual(len(territory_datasets), 0) other_datasets = self.get_context_variable('other_datasets') self.assertEqual(len(other_datasets), 3) for dataset in other_datasets: self.assertIn( '<div data-udata-dataset-id="{dataset.id}"'.format( dataset=dataset), data) self.assertTrue(self.get_context_variable('has_pertinent_datasets')) self.assertEqual(self.get_context_variable('town_datasets'), []) self.assertIn('Some of your datasets have an exact match!', data)
def test_default(self): org = OrganizationFactory() source = HarvestSourceFactory(backend='factory', organization=org) with self.assert_emit(signals.before_harvest_job, signals.after_harvest_job): self.action(source.slug) source.reload() self.assertEqual(len(HarvestJob.objects(source=source)), 1) job = source.get_last_job() self.assertEqual(job.status, 'done') self.assertEqual(job.errors, []) self.assertIsNotNone(job.started) self.assertIsNotNone(job.ended) self.assertEqual(len(job.items), COUNT) for item in job.items: self.assertEqual(item.status, 'done') self.assertEqual(item.errors, []) self.assertIsNotNone(item.started) self.assertIsNotNone(item.ended) self.assertIsNotNone(item.dataset) dataset = item.dataset self.assertIsNotNone(Dataset.objects(id=dataset.id).first()) self.assertEqual(dataset.organization, org) self.assertIn('harvest:remote_id', dataset.extras) self.assertIn('harvest:last_update', dataset.extras) self.assertIn('harvest:source_id', dataset.extras) self.assertEqual(len(HarvestJob.objects), 1) self.assertEqual(len(Dataset.objects), COUNT)
def test_preview(self): org = OrganizationFactory() source = HarvestSourceFactory(backend='factory', organization=org) job = actions.preview(source.slug) self.assertEqual(job.status, 'done') self.assertEqual(job.errors, []) self.assertIsNotNone(job.started) self.assertIsNotNone(job.ended) self.assertEqual(len(job.items), COUNT) for item in job.items: self.assertEqual(item.status, 'done') self.assertEqual(item.errors, []) self.assertIsNotNone(item.started) self.assertIsNotNone(item.ended) self.assertIsNotNone(item.dataset) dataset = item.dataset self.assertEqual(dataset.organization, org) self.assertIn('harvest:remote_id', dataset.extras) self.assertIn('harvest:last_update', dataset.extras) self.assertIn('harvest:source_id', dataset.extras) self.assertEqual(len(HarvestJob.objects), 0) self.assertEqual(len(Dataset.objects), 0)
def test_with_initial_and_not_member(self): Ownable, OwnableForm = self.factory() user = UserFactory() org = OrganizationFactory(members=[Member(user=user, role='editor')]) neworg = OrganizationFactory() ownable = Ownable(organization=org) form = OwnableForm(MultiDict({'organization': str(neworg.id)}), ownable) self.assertEqual(form.organization.data, neworg) login_user(user) form.validate() self.assertIn('organization', form.errors) self.assertEqual(len(form.errors['organization']), 1)
def test_organization_over_owner(self): Ownable, OwnableForm = self.factory() user = UserFactory() member = Member(user=user, role='editor') org = OrganizationFactory(members=[member]) login_user(user) form = OwnableForm( MultiDict({ 'owner': str(user.id), 'organization': str(org.id) })) self.assertEqual(form.owner.data, user) self.assertEqual(form.organization.data, org) form.validate() self.assertEqual(form.errors, {}) self.assertIsNone(form.owner.data) self.assertEqual(form.organization.data, org) ownable = Ownable() form.populate_obj(ownable) self.assertIsNone(ownable.owner) self.assertEqual(ownable.organization, org)
def test_render_metrics(self): '''It should render the search page''' for i in range(3): org = OrganizationFactory() DatasetFactory(organization=org) ReuseFactory(organization=org) response = self.get(url_for('site.dashboard')) self.assert200(response)
def test_render_reuse_page(self): '''It should render the reuse page''' org = OrganizationFactory() dataset = DatasetFactory(organization=org) reuse = ReuseFactory(organization=org, datasets=[dataset]) response = self.get(url_for('reuses.show', reuse=reuse)) self.assert200(response)
def test_with_initial_organization(self): Ownable, OwnableForm = self.factory() org = OrganizationFactory() ownable = Ownable(organization=org) form = OwnableForm(None, ownable) self.assertIsNone(form.owner.data) self.assertEqual(form.organization.data, org)
def test_render_dataset_page(self): '''It should render the dataset page''' org = OrganizationFactory() dataset = DatasetFactory(organization=org) ReuseFactory(organization=org, datasets=[dataset]) response = self.get(url_for('datasets.show', dataset=dataset)) self.assert200(response)
def test_list_sources_for_org(self): org = OrganizationFactory() sources = HarvestSourceFactory.create_batch(3, organization=org) HarvestSourceFactory() response = self.get(url_for('api.harvest_sources', owner=str(org.id))) self.assert200(response) self.assertEqual(len(response.json), len(sources))
def test_render_organization_page(self): '''It should render the organization page''' org = OrganizationFactory() datasets = [DatasetFactory(organization=org) for _ in range(3)] for dataset in datasets: ReuseFactory(organization=org, datasets=[dataset]) response = self.get(url_for('organizations.show', org=org)) self.assert200(response)
def test_organizations_csv_with_filters(self): '''Should handle filtering but ignore paging or facets''' user = self.login() with self.autoindex(): public_service_badge = OrganizationBadge( kind=PUBLIC_SERVICE, created=datetime.now(), created_by=user ) filtered_orgs = [ OrganizationFactory(badges=[public_service_badge]) for _ in range(6)] orgs = [OrganizationFactory() for _ in range(3)] hidden_org = OrganizationFactory(deleted=datetime.now()) response = self.get(url_for('site.organizations_csv', badge=PUBLIC_SERVICE, page_size=3, facets=True)) self.assert200(response) self.assertEqual(response.mimetype, 'text/csv') self.assertEqual(response.charset, 'utf-8') csvfile = StringIO.StringIO(response.data) reader = csv.get_reader(csvfile) header = reader.next() self.assertEqual(header[0], 'id') self.assertIn('name', header) self.assertIn('description', header) self.assertIn('created_at', header) self.assertIn('last_modified', header) self.assertIn('metric.datasets', header) rows = list(reader) ids = [row[0] for row in rows] # Should ignore paging self.assertEqual(len(rows), len(filtered_orgs)) # SHoulf pass filter for org in filtered_orgs: self.assertIn(str(org.id), ids) for org in orgs: self.assertNotIn(str(org.id), ids) self.assertNotIn(str(hidden_org.id), ids)
def test_create_and_retrieve_for_org(self): org = OrganizationFactory() FakeActivity.objects.create(actor=self.user, related_to=self.fake, organization=org) activities = Activity.objects(organization=org) self.assertEqual(len(activities), 1) self.assertIsInstance(activities[0], FakeActivity)
def test_render_search(self): '''It should render the search page''' with self.autoindex(): for i in range(3): org = OrganizationFactory() DatasetFactory(organization=org) ReuseFactory(organization=org) response = self.get(url_for('front.search')) self.assert200(response)
def test_render_home(self): '''It should render the home page''' with self.autoindex(): for i in range(3): org = OrganizationFactory() DatasetFactory(organization=org) ReuseFactory(organization=org) response = self.get(url_for('site.home')) self.assert200(response)
def test_with_initial_and_both_member(self): Ownable, OwnableForm = self.factory() user = UserFactory() org = OrganizationFactory(members=[Member(user=user, role='editor')]) neworg = OrganizationFactory( members=[Member(user=user, role='editor')]) ownable = Ownable(organization=org) form = OwnableForm(MultiDict({'organization': str(neworg.id)}), ownable) self.assertEqual(form.organization.data, neworg) login_user(user) form.validate() self.assertEqual(form.errors, {}) form.populate_obj(ownable) self.assertIsNone(ownable.owner) self.assertEqual(ownable.organization, neworg)
def test_preview_max_items(self): org = OrganizationFactory() source = HarvestSourceFactory(backend='factory', organization=org, config={'count': 10}) self.app.config['HARVEST_PREVIEW_MAX_ITEMS'] = 5 job = actions.preview(source.slug) self.assertEqual(len(job.items), 5)
def test_with_initial_organization_and_user_logged(self): Ownable, OwnableForm = self.factory() user = UserFactory() org = OrganizationFactory() ownable = Ownable(organization=org) login_user(user) form = OwnableForm(None, ownable) self.assertIsNone(form.owner.data) self.assertEqual(form.organization.data, org)
def test_toggle_badge_on_from_file(self): orgs = [OrganizationFactory() for _ in range(2)] with NamedTemporaryFile() as temp: temp.write('\n'.join((str(org.id) for org in orgs))) temp.flush() toggle(temp.name, PUBLIC_SERVICE) for org in orgs: org.reload() self.assertEqual(org.badges[0].kind, PUBLIC_SERVICE)
def test_list_sources_for_org(self): org = OrganizationFactory() self.assertEqual(actions.list_sources(org), []) sources = HarvestSourceFactory.create_batch(3, organization=org) HarvestSourceFactory() result = actions.list_sources(org) self.assertEqual(len(result), len(sources)) for source in sources: self.assertIn(source, result)
def test_no_user_logged_in_permission(self): Ownable, OwnableForm = self.factory() member = Member(user=UserFactory(), role='editor') org = OrganizationFactory(members=[member]) form = OwnableForm(MultiDict({'organization': str(org.id)})) self.assertEqual(form.organization.data, org) self.assertFalse(form.validate()) self.assertIn('organization', form.errors) self.assertEqual(len(form.errors['organization']), 1)
def test_my_org_reuses(self): user = self.login() member = Member(user=user, role='editor') organization = OrganizationFactory(members=[member]) reuses = [ReuseFactory(owner=user) for _ in range(2)] org_reuses = [ ReuseFactory(organization=organization) for _ in range(2) ] response = self.get(url_for('api.my_org_reuses')) self.assert200(response) self.assertEqual(len(response.json), len(reuses) + len(org_reuses))
def test_create_and_retrieve_for_related(self): org = OrganizationFactory() FakeActivity.objects.create(actor=self.user, related_to=self.fake, organization=org) FakeActivity.objects.create(actor=UserFactory(), related_to=self.fake) activities = Activity.objects(related_to=self.fake) self.assertEqual(len(activities), 2) for activity in activities: self.assertIsInstance(activity, FakeActivity)
def test_render_home(self): '''It should render the home page''' for i in range(3): org = OrganizationFactory() DatasetFactory(organization=org) ReuseFactory(organization=org) current_site.settings.home_datasets = [ DatasetFactory() for _ in range(3)] current_site.settings.home_reuses = [ ReuseFactory() for _ in range(3)] response = self.get(url_for('site.home')) self.assert200(response)
def test_create_source_with_org_not_member(self): '''It should create and attach a new source to an organization''' user = self.login() member = Member(user=user, role='editor') org = OrganizationFactory(members=[member]) data = { 'name': faker.word(), 'url': faker.url(), 'backend': 'factory', 'organization': str(org.id) } response = self.post(url_for('api.harvest_sources'), data) self.assert403(response)
def test_toggle_badge_on(self): org = OrganizationFactory() toggle(str(org.id), PUBLIC_SERVICE) org.reload() self.assertEqual(org.badges[0].kind, PUBLIC_SERVICE)