Пример #1
0
    def test_project_return_only_ids(self):
        ''' Search results from the project and org/project endpoints are returned
            as only IDs if requested
        '''
        organization = OrganizationFactory(name=u"Code for San Francisco")
        project_one = ProjectFactory(organization_name=organization.name, description=u'ruby ruby ruby ruby ruby', last_updated=datetime.now() - timedelta(10))
        project_two = ProjectFactory(organization_name=organization.name, description=u'ruby', last_updated=datetime.now() - timedelta(1))
        db.session.commit()
        project_one_id = project_one.id
        project_two_id = project_two.id

        project_response = self.app.get('/api/projects?q=ruby&only_ids=true')
        project_response = json.loads(project_response.data)
        assert isinstance(project_response['total'], int)
        assert isinstance(project_response['objects'], list)
        self.assertEqual(len(project_response["objects"]), 2)
        assert isinstance(project_response['objects'][0], int)
        assert isinstance(project_response['objects'][1], int)
        self.assertEqual(project_response['objects'][0], project_one_id)
        self.assertEqual(project_response['objects'][1], project_two_id)

        org_project_response = self.app.get('/api/organizations/Code-for-San-Francisco/projects?q=ruby&only_ids=true')
        org_project_response = json.loads(org_project_response.data)
        assert isinstance(org_project_response['total'], int)
        assert isinstance(org_project_response['objects'], list)
        self.assertEqual(len(org_project_response["objects"]), 2)
        assert isinstance(org_project_response['objects'][0], int)
        assert isinstance(org_project_response['objects'][1], int)
        self.assertEqual(org_project_response['objects'][0], project_one_id)
        self.assertEqual(org_project_response['objects'][1], project_two_id)
Пример #2
0
    def test_organization_issues(self):
        ''' Test getting all of an organization's issues
        '''
        organization = OrganizationFactory(name=u'Civic Project',
                                           type=u'Not a brigade')
        db.session.flush()

        project1 = ProjectFactory(organization_name=organization.name,
                                  name=u'Civic Project 1')
        project2 = ProjectFactory(organization_name=organization.name,
                                  name=u'Civic Project 2')
        db.session.flush()

        IssueFactory(project_id=project1.id, title=u'Civic Issue 1.1')
        IssueFactory(project_id=project1.id, title=u'Civic Issue 1.2')
        IssueFactory(project_id=project2.id, title=u'Civic Issue 2.1')
        db.session.commit()

        response = self.app.get('/api/organizations/{}/issues'.format(
            organization.name))
        self.assertEqual(response.status_code, 200)
        response = json.loads(response.data)
        self.assertEqual(response['total'], 3)

        self.assertTrue(u'Civic Issue 1.1' in
                        [item['title'] for item in response['objects']])
Пример #3
0
    def test_project_search_existing_phrase(self):
        ''' Searching for an existing phrase in the project and org/project endpoints
            returns expected results
        '''
        organization = OrganizationFactory(name=u"Code for San Francisco")
        ProjectFactory(organization_name=organization.name,
                       description=u'ruby on rails')
        ProjectFactory(organization_name=organization.name,
                       description=u'i love lamp')
        db.session.commit()
        project_response = self.app.get('/api/projects?q=ruby on rails')
        project_response = json.loads(project_response.data)
        assert isinstance(project_response['total'], int)
        assert isinstance(project_response['objects'], list)
        self.assertEqual(project_response['total'], 1)
        self.assertEqual(len(project_response['objects']), 1)

        org_project_response = self.app.get(
            '/api/organizations/Code-for-San-Francisco/projects?q=ruby on rails'
        )
        org_project_response = json.loads(org_project_response.data)
        assert isinstance(org_project_response['total'], int)
        assert isinstance(org_project_response['objects'], list)
        self.assertEqual(org_project_response['total'], 1)
        self.assertEqual(len(org_project_response['objects']), 1)
Пример #4
0
    def test_current_projects(self):
        """
        Show three most recently updated github projects
        """
        organization = OrganizationFactory(name=u'Code for San Francisco')
        db.session.flush()

        ProjectFactory(organization_name=organization.name,
                       name=u'Project 1',
                       last_updated='Mon, 01 Jan 2010 00:00:00 GMT')
        ProjectFactory(organization_name=organization.name,
                       name=u'Project 2',
                       last_updated='Tue, 01 Jan 2011 00:00:00 GMT')
        ProjectFactory(organization_name=organization.name,
                       name=u'Non Github Project',
                       last_updated='Wed, 01 Jan 2013 00:00:00',
                       github_details=None)
        ProjectFactory(organization_name=organization.name,
                       name=u'Project 3',
                       last_updated='Thu, 01 Jan 2014 00:00:00 GMT')
        db.session.commit()

        response = self.app.get('/api/organizations/Code-for-San-Francisco')
        response = json.loads(response.data)

        self.assertEqual(len(response['current_projects']), 3)
        self.assertEqual(response['current_projects'][0]['name'], u'Project 3')
        self.assertEqual(response['current_projects'][1]['name'],
                         u'Non Github Project')
        self.assertEqual(response['current_projects'][2]['name'], u'Project 2')
Пример #5
0
    def test_orgs_projects_order(self):
        """
        Test that a orgs projects come back in order of last_updated.
        """
        organization = OrganizationFactory(name=u'Code for San Francisco')
        db.session.flush()

        ProjectFactory(organization_name=organization.name,
                       name=u'Project 1',
                       last_updated='Mon, 01 Jan 2010 00:00:00 GMT')
        ProjectFactory(organization_name=organization.name,
                       name=u'Project 2',
                       last_updated='Tue, 01 Jan 2011 00:00:00 GMT')
        ProjectFactory(organization_name=organization.name,
                       name=u'Non Github Project',
                       last_updated='Wed, 01 Jan 2013 00:00:00',
                       github_details=None)
        ProjectFactory(organization_name=organization.name,
                       name=u'Project 3',
                       last_updated='Thu, 01 Jan 2014 00:00:00 GMT')
        db.session.commit()

        response = self.app.get(
            '/api/organizations/Code-for-San-Francisco/projects')
        response = json.loads(response.data)

        self.assertEqual(response['objects'][0]['name'], u'Project 3')
        self.assertEqual(response['objects'][1]['name'], u'Non Github Project')
        self.assertEqual(response['objects'][2]['name'], u'Project 2')
        self.assertEqual(response['objects'][3]['name'], u'Project 1')
Пример #6
0
 def test_project_search_ranked_order(self):
     ''' Search results from the project and org/project endpoints are returned
         with correct ranking values
     '''
     organization = OrganizationFactory(name=u"Code for San Francisco")
     ProjectFactory(organization_name=organization.name,
                    status=u'TEST',
                    last_updated=datetime.now() - timedelta(10000))
     ProjectFactory(organization_name=organization.name,
                    description=u'testing a new thing',
                    last_updated=datetime.now() - timedelta(1))
     ProjectFactory(organization_name=organization.name,
                    tags=[u'test,tags,what,ever'],
                    last_updated=datetime.now() - timedelta(100))
     ProjectFactory(organization_name=organization.name,
                    last_updated=datetime.now())
     db.session.commit()
     project_response = self.app.get('/api/projects?q=TEST')
     project_response = json.loads(project_response.data)
     self.assertEqual(project_response['total'], 3)
     self.assertEqual(project_response['objects'][0]['status'], u'TEST')
     self.assertEqual(project_response['objects'][1]['tags'],
                      [u'test,tags,what,ever'])
     self.assertEqual(project_response['objects'][2]['description'],
                      u'testing a new thing')
Пример #7
0
    def test_project_search_empty_string(self):
        ''' Searching an empty string on the project and org/project endpoints returns all projects
        '''
        organization = OrganizationFactory(name=u"Code for San Francisco")
        ProjectFactory(organization_name=organization.name,
                       description=u'ruby ruby ruby ruby ruby',
                       last_updated=datetime.now() - timedelta(10))
        ProjectFactory(organization_name=organization.name,
                       description=u'ruby',
                       last_updated=datetime.now() - timedelta(1))
        db.session.commit()
        project_response = self.app.get('/api/projects?q=')
        project_response = json.loads(project_response.data)
        assert isinstance(project_response['total'], int)
        assert isinstance(project_response['objects'], list)
        self.assertEqual(project_response['total'], 2)
        self.assertEqual(len(project_response['objects']), 2)

        org_project_response = self.app.get(
            '/api/organizations/Code-for-San-Francisco/projects?q=')
        org_project_response = json.loads(org_project_response.data)
        assert isinstance(org_project_response['total'], int)
        assert isinstance(org_project_response['objects'], list)
        self.assertEqual(org_project_response['total'], 2)
        self.assertEqual(len(org_project_response['objects']), 2)
Пример #8
0
    def test_project_search_order_by_last_updated_sort_asc(self):
        ''' Search results from the project and org/project endpoints are returned
            in ascending order of last_updated, if requested
        '''
        organization = OrganizationFactory(name=u"Code for San Francisco")
        ProjectFactory(organization_name=organization.name,
                       description=u'ruby ruby ruby ruby ruby',
                       last_updated=datetime.now() - timedelta(10))
        ProjectFactory(organization_name=organization.name,
                       description=u'ruby',
                       last_updated=datetime.now() - timedelta(1))
        db.session.commit()
        project_response = self.app.get(
            '/api/projects?q=ruby&sort_by=last_updated&sort_dir=asc')
        project_response = json.loads(project_response.data)
        assert isinstance(project_response['total'], int)
        assert isinstance(project_response['objects'], list)
        self.assertEqual(len(project_response["objects"]), 2)
        self.assertEqual(project_response['objects'][0]['description'],
                         'ruby ruby ruby ruby ruby')

        org_project_response = self.app.get(
            '/api/organizations/Code-for-San-Francisco/projects?q=ruby&sort_by=last_updated&sort_dir=asc'
        )
        org_project_response = json.loads(org_project_response.data)
        assert isinstance(org_project_response['total'], int)
        assert isinstance(org_project_response['objects'], list)
        self.assertEqual(len(org_project_response["objects"]), 2)
        self.assertEqual(org_project_response['objects'][0]['description'],
                         'ruby ruby ruby ruby ruby')
Пример #9
0
    def test_issues_query_filter(self):
        org1 = OrganizationFactory(name=u'Code for Africa',
                                   type=u'Code for All')
        org2 = OrganizationFactory(name=u'Code for San Francisco',
                                   type=u'Brigade')
        proj = ProjectFactory(type=u'web',
                              organization_name=u'Code for Africa')
        another_proj = ProjectFactory(
            type=u'mobile', organization_name=u'Code for San Francisco')
        db.session.flush()
        awesome_issue = IssueFactory(title=u'Awesome issue',
                                     project_id=proj.id)
        sad_issue = IssueFactory(title=u'Sad issue',
                                 body=u'learning swift is sad',
                                 project_id=another_proj.id)
        db.session.commit()

        # Make sure total number of stories is 2
        response = self.app.get('/api/issues')
        self.assertEqual(response.status_code, 200)
        response = json.loads(response.data)
        self.assertEqual(response['total'], 2)

        # Filter by title should return only 1
        response = self.app.get('/api/issues?title=awesome')
        self.assertEqual(response.status_code, 200)
        response = json.loads(response.data)
        self.assertEqual(response['total'], 1)
        self.assertEqual(response['objects'][0]['title'], u'Awesome issue')

        # Filter by type should return only 1
        response = self.app.get('/api/issues?body=swift')
        self.assertEqual(response.status_code, 200)
        response = json.loads(response.data)
        self.assertEqual(response['total'], 1)
        self.assertEqual(response['objects'][0]['title'], u'Sad issue')

        # Filter by deep searching project type should return 1
        response = self.app.get('/api/issues?project_type=web')
        self.assertEqual(response.status_code, 200)
        response = json.loads(response.data)
        self.assertEqual(response['total'], 1)
        self.assertEqual(response['objects'][0]['title'], u'Awesome issue')

        # Filter by deep searching organization type should return 1
        response = self.app.get('/api/issues?organization_type=Code for All')
        self.assertEqual(response.status_code, 200)
        response = json.loads(response.data)
        self.assertEqual(response['total'], 1)
        self.assertEqual(response['objects'][0]['title'], u'Awesome issue')

        # Filter by deep searching organization type should return 1
        response = self.app.get('/api/issues?organization_type=Brigade')
        self.assertEqual(response.status_code, 200)
        response = json.loads(response.data)
        self.assertEqual(response['total'], 1)
        self.assertEqual(response['objects'][0]['title'], u'Sad issue')
Пример #10
0
def collection_batch():
    """Create and commit a batch of Collection instances,
    with associated projects, clients and roles."""
    collections = [CollectionFactory() for _ in range(randint(3, 5))]
    ProjectFactory.create_batch(randint(0, 3), collections=collections)
    for collection in collections:
        ClientFactory.create_batch(randint(0, 3), collection=collection)
        RoleFactory.create_batch(randint(0, 3), collection=collection)
    return collections
Пример #11
0
    def test_project_cascading_deletes(self):
        ''' Test that issues get deleted when their parent
            project and org is deleted
        '''

        # set up test objects and delete a project
        organization = OrganizationFactory(name=u'TEST ORG')
        db.session.flush()

        project = ProjectFactory(organization_name=organization.name,
                                 name=u'TEST PROJECT')
        db.session.flush()

        issue = IssueFactory(title=u'TEST ISSUE', project_id=project.id)
        another_issue = IssueFactory(title=u'ANOTHER TEST ISSUE',
                                     project_id=project.id)
        a_third_issue = IssueFactory(title=u'A THIRD TEST ISSUE',
                                     project_id=project.id)
        db.session.commit()

        # make sure the issues are in the db
        issues = db.session.query(Issue).all()
        self.assertTrue(len(issues) == 3)

        db.session.execute('DELETE FROM project')
        db.session.commit()
        issues = db.session.query(Issue).all()
        self.assertFalse(len(issues))

        # delete an organization
        project = ProjectFactory(organization_name=organization.name,
                                 name=u'TEST PROJECT')
        db.session.flush()

        issue = IssueFactory(title=u'TEST ISSUE', project_id=project.id)
        another_issue = IssueFactory(title=u'ANOTHER TEST ISSUE',
                                     project_id=project.id)
        a_third_issue = IssueFactory(title=u'A THIRD TEST ISSUE',
                                     project_id=project.id)
        db.session.add(issue)
        db.session.add(another_issue)
        db.session.add(a_third_issue)
        db.session.commit()

        # make sure the issues are in the db
        issues = db.session.query(Issue).all()
        self.assertTrue(len(issues) == 3)

        db.session.execute('DELETE FROM organization')
        db.session.commit()
        issues = db.session.query(Issue).all()
        self.assertFalse(len(issues))
Пример #12
0
    def test_issue_cascading_deletes(self):
        ''' Test that labels get deleted when their parent
            issue, project, and org is deleted
        '''

        # set up test objects and delete an issue
        organization = OrganizationFactory(name=u'TEST ORG')
        db.session.flush()

        project = ProjectFactory(organization_name=organization.name,
                                 name=u'TEST PROJECT')
        db.session.flush()

        issue = IssueFactory(title=u'TEST ISSUE', project_id=project.id)
        db.session.flush()

        label = LabelFactory(issue_id=issue.id)
        db.session.flush()

        db.session.execute('DELETE FROM issue')
        db.session.commit()
        labels = db.session.query(Label).all()
        self.assertFalse(len(labels))

        # delete a project
        issue = IssueFactory(title=u'TEST ISSUE', project_id=project.id)
        db.session.flush()

        label = LabelFactory(issue_id=issue.id)
        db.session.flush()

        db.session.execute('DELETE FROM project')
        db.session.commit()
        labels = db.session.query(Label).all()
        self.assertFalse(len(labels))

        # delete an organization
        project = ProjectFactory(organization_name=organization.name,
                                 name=u'TEST PROJECT')
        db.session.flush()

        issue = IssueFactory(title=u'TEST ISSUE', project_id=project.id)
        db.session.flush()

        label = LabelFactory(issue_id=issue.id)
        db.session.flush()

        db.session.execute('DELETE FROM organization')
        db.session.commit()
        labels = db.session.query(Label).all()
        self.assertFalse(len(labels))
Пример #13
0
    def test_spaces_in_issues_requests_list(self):
        ''' Test that spaces in the list of labels works
        '''
        # Set up an issue with labels
        # Try requesting it with spaces in the request
        # Assert that it returns
        organization = OrganizationFactory()
        db.session.commit()
        project = ProjectFactory(organization_name=organization.name)
        db.session.commit()
        issue = IssueFactory(project_id=project.id)
        db.session.commit()
        hw_label = LabelFactory(name=u'help wanted', issue_id=issue.id)
        bug_label = LabelFactory(name=u'bug', issue_id=issue.id)
        db.session.commit()

        # Test that help wanted works
        response = self.app.get('/api/issues/labels/help wanted')
        response = json.loads(response.data)
        self.assertEqual(len(response['objects']), 1)

        # Test that help wanted, bug works
        response = self.app.get('/api/issues/labels/help wanted, bug')
        response = json.loads(response.data)
        self.assertEqual(len(response['objects']), 1)
Пример #14
0
def project_build(**id):
    """Build and return an uncommitted Project instance.
    Referenced collections are however committed."""
    return ProjectFactory.build(
        **id,
        collections=CollectionFactory.create_batch(randint(0, 3)),
    )
Пример #15
0
def test_delete_document_forbidden(user_vip, user_normal, client_user_vip,
                                   settings, tmpdir, model, attribute):
    """
    Test view for uploading doc.
    """
    settings.MEDIA_ROOT = tmpdir.mkdir('test_delete')
    project = ProjectFactory.create(local_custodians=[user_vip])
    contract = ContractFactory(project=project)
    entities = {'project': project, 'contract': contract}

    the_file = SimpleUploadedFile("file.txt", b"file_content")
    url = reverse('document_add')
    data = {
        'content_type': ContentType.objects.get_for_model(model).pk,
        'object_id': entities.get(attribute).pk,
        'content': the_file
    }

    response = client_user_vip.post(url, data)
    pk = response.json()['id']

    client_user_vip.logout()
    client_user_vip.login(username=user_normal.username,
                          password=user_normal.password)

    url = reverse('document_delete', args=(pk, ))
    assert client_user_vip.delete(url).status_code == 403
Пример #16
0
    def test_project_search_includes_name(self):
        ''' The name field is included in search results from the project and org/project endpoints
        '''
        organization = OrganizationFactory(name=u"Code for San Francisco")
        ProjectFactory(organization_name=organization.name, name=u'My Cool Project')
        ProjectFactory(organization_name=organization.name, name=u'My Dumb Project')
        db.session.commit()
        project_response = self.app.get('/api/projects?q=cool')
        project_response = json.loads(project_response.data)
        self.assertEqual(len(project_response['objects']), 1)
        self.assertEqual(project_response['objects'][0]['name'], 'My Cool Project')

        org_project_response = self.app.get('/api/organizations/Code-for-San-Francisco/projects?q=cool')
        org_project_response = json.loads(org_project_response.data)
        self.assertEqual(len(org_project_response['objects']), 1)
        self.assertEqual(org_project_response['objects'][0]['name'], 'My Cool Project')
Пример #17
0
    def test_issues_with_labels(self):
        '''
        Test that /api/issues/labels works as expected.
        Should return issues with any of the passed in label names
        '''
        project = ProjectFactory()
        db.session.flush()

        issue = IssueFactory(project_id=project.id)
        issue2 = IssueFactory(project_id=project.id)

        label1 = LabelFactory(name=u'enhancement')
        label2 = LabelFactory(name=u'hack')
        issue.labels = [label1]
        issue2.labels = [label2]

        db.session.commit()

        response = self.app.get('/api/issues/labels/enhancement')
        self.assertEqual(response.status_code, 200)
        response = json.loads(response.data)
        self.assertEqual(response['total'], 1)
        self.assertEqual(response['objects'][0]['labels'][0]['name'],
                         u'enhancement')

        response = self.app.get('/api/issues/labels/enhancement,hack')
        self.assertEqual(response.status_code, 200)
        response = json.loads(response.data)
        self.assertEqual(response['total'], 0)
Пример #18
0
def project_batch():
    """Create and commit a batch of Project instances."""
    return [
        ProjectFactory(
            collections=CollectionFactory.create_batch(randint(0, 3)))
        for _ in range(randint(3, 5))
    ]
Пример #19
0
    def test_pagination(self):
        ProjectFactory()
        ProjectFactory()
        ProjectFactory()
        db.session.commit()

        response = self.app.get('/api/projects?per_page=2')
        response = json.loads(response.data)
        assert isinstance(response, dict)
        self.assertEqual(len(response['objects']), 2)
        self.assertEqual(response['pages']['next'],
                         'http://localhost/api/projects?per_page=2&page=2')
        self.assertEqual(response['pages']['last'],
                         'http://localhost/api/projects?per_page=2&page=2')
        self.assertNotIn('first', response['pages'])
        self.assertNotIn('prev', response['pages'])
Пример #20
0
 def test_org_projects_dont_include_tsv(self):
     OrganizationFactory(name=u"Code for San Francisco")
     ProjectFactory(organization_name=u"Code for San Francisco")
     db.session.commit()
     response = self.app.get('/api/organizations/Code-for-San-Francisco')
     response = json.loads(response.data)
     self.assertFalse('tsv_body' in response['current_projects'][0])
Пример #21
0
    def test_project_search_includes_tags(self):
        """
        The tags field is included in search results from the project and org/project endpoints
        """
        organization = OrganizationFactory(name=u"Code for San Francisco")
        ProjectFactory(organization_name=organization.name, tags=u'mapping, philly')
        ProjectFactory(organization_name=organization.name, tags=u'food stamps, health')
        db.session.commit()
        project_response = self.app.get('/api/projects?q=stamps')
        project_response = json.loads(project_response.data)
        self.assertEqual(len(project_response['objects']), 1)
        self.assertEqual(project_response['objects'][0]['tags'], 'food stamps, health')

        org_project_response = self.app.get('/api/organizations/Code-for-San-Francisco/projects?q=stamps')
        org_project_response = json.loads(org_project_response.data)
        self.assertEqual(len(org_project_response['objects']), 1)
        self.assertEqual(org_project_response['objects'][0]['tags'], 'food stamps, health')
Пример #22
0
    def test_all_projects_order(self):
        """
        Test that projects gets returned in order of last_updated
        """
        ProjectFactory(name=u'Project 1', last_updated='Mon, 01 Jan 2010 00:00:00 GMT')
        ProjectFactory(name=u'Project 2', last_updated='Tue, 01 Jan 2011 00:00:00 GMT')
        ProjectFactory(name=u'Non Github Project', last_updated='Wed, 01 Jan 2013 00:00:00', github_details=None)
        ProjectFactory(name=u'Project 3', last_updated='Thu, 01 Jan 2014 00:00:00 GMT')
        db.session.commit()

        response = self.app.get('/api/projects')
        response = json.loads(response.data)

        self.assertEqual(response['objects'][0]['name'], u'Project 3')
        self.assertEqual(response['objects'][1]['name'], u'Non Github Project')
        self.assertEqual(response['objects'][2]['name'], u'Project 2')
        self.assertEqual(response['objects'][3]['name'], u'Project 1')
Пример #23
0
    def test_project_search_includes_organization_name(self):
        '''
        The organization name is included in the project search
        '''
        organization = OrganizationFactory(name=u"Code for San Francisco")
        ProjectFactory(organization_name=organization.name,
                       name=u"Project One")
        ProjectFactory(organization_name=organization.name,
                       name=u"Project Two",
                       description=u"America")

        organization = OrganizationFactory(name=u"Code for America")
        ProjectFactory(organization_name=organization.name,
                       name=u"Project Three")
        ProjectFactory(organization_name=organization.name,
                       name=u"Project Four",
                       tags=u"San Francisco")
        db.session.commit()

        # Test that org_name matches return before project name
        project_response = self.app.get(
            '/api/projects?q=Code+for+San+Francisco')
        project_response = json.loads(project_response.data)
        self.assertEqual(len(project_response['objects']), 3)
        self.assertEqual(project_response['objects'][0]['name'],
                         u'Project One')
        self.assertEqual(project_response['objects'][1]['name'],
                         u'Project Two')
        self.assertEqual(project_response['objects'][2]['name'],
                         u'Project Four')
        self.assertTrue(
            'San Francisco' in project_response['objects'][2]['tags'])

        # Test that org name matches return before project description
        project_response = self.app.get('/api/projects?q=Code for America')
        project_response = json.loads(project_response.data)
        self.assertEqual(len(project_response['objects']), 3)
        self.assertEqual(project_response['objects'][0]['name'],
                         u'Project Three')
        self.assertEqual(project_response['objects'][1]['name'],
                         u'Project Four')
        self.assertEqual(project_response['objects'][2]['name'],
                         u'Project Two')
        self.assertEqual(project_response['objects'][2]['description'],
                         u'America')
Пример #24
0
    def test_cascading_delete(self):
        '''
        Test that when an organization is deleted, all of its projects, issues, stories, events are deleted
        '''
        # Create an organization
        organization = OrganizationFactory()
        db.session.flush()

        # Create a project, an event and a story
        project = ProjectFactory(organization_name=organization.name)
        EventFactory(organization_name=organization.name)
        StoryFactory(organization_name=organization.name)
        db.session.flush()

        # Create an issue and give it a label
        issue = IssueFactory(project_id=project.id)
        db.session.flush()

        label = LabelFactory()
        issue.labels = [label]
        db.session.flush()

        # Get all of the stuff
        orgs = Organization.query.all()
        eve = Event.query.all()
        sto = Story.query.all()
        proj = Project.query.all()
        iss = Issue.query.all()
        lab = Label.query.all()

        # Verify they are there
        self.assertEqual(len(orgs), 1)
        self.assertEqual(len(eve), 1)
        self.assertEqual(len(sto), 1)
        self.assertEqual(len(proj), 1)
        self.assertEqual(len(iss), 1)
        self.assertEqual(len(lab), 1)

        # Delete the one organization
        db.session.delete(orgs[0])
        db.session.commit()

        # Get all the stuff again
        orgs = Organization.query.all()
        eve = Event.query.all()
        sto = Story.query.all()
        proj = Project.query.all()
        iss = Issue.query.all()
        lab = Label.query.all()

        # Make sure they are all gone
        self.assertEqual(len(orgs), 0)
        self.assertEqual(len(eve), 0)
        self.assertEqual(len(sto), 0)
        self.assertEqual(len(proj), 0)
        self.assertEqual(len(iss), 0)
        self.assertEqual(len(lab), 0)
Пример #25
0
    def test_good_orgs_projects(self):
        organization = OrganizationFactory(name=u'Code for America')
        ProjectFactory(organization_name=organization.name)
        db.session.commit()

        response = self.app.get('/api/organizations/Code for America/projects')
        self.assertEqual(response.status_code, 200)
        response = json.loads(response.data)
        assert isinstance(response, dict)
Пример #26
0
    def test_project_search_tsv_body_not_in_response(self):
        ''' The tsv_body field is not in the response from the project and org/project endpoints
        '''
        organization = OrganizationFactory(name=u"Code for San Francisco")
        ProjectFactory(organization_name=organization.name, description=u'ruby ruby ruby ruby ruby', last_updated=datetime.now() - timedelta(10))
        ProjectFactory(organization_name=organization.name, description=u'ruby', last_updated=datetime.now() - timedelta(1))
        db.session.commit()
        project_response = self.app.get('/api/projects?q=')
        project_response = json.loads(project_response.data)
        self.assertEqual(len(project_response['objects']), 2)
        self.assertFalse('tsv_body' in project_response['objects'][0])
        self.assertFalse('tsv_body' in project_response['objects'][1])

        org_project_response = self.app.get('/api/organizations/Code-for-San-Francisco/projects?q=')
        org_project_response = json.loads(org_project_response.data)
        self.assertEqual(len(org_project_response['objects']), 2)
        self.assertFalse('tsv_body' in org_project_response['objects'][0])
        self.assertFalse('tsv_body' in org_project_response['objects'][1])
Пример #27
0
def test_upload_document_blank_data(user_vip, client_user_vip):
    """
    Test view for uploading doc.
    """
    project = ProjectFactory.create(local_custodians=[user_vip])
    contract = ContractFactory(project=project)
    # membership = MembershipFactory(project=project, contract=contract)
    # assign_perm(Permissions.EDIT.value, user_vip, project)
    url = reverse('document_add')
    data = {'file': SimpleUploadedFile("file.txt", b"file_content")}
    response = client_user_vip.post(url, data)
    assert response.status_code == 404
Пример #28
0
    def test_project_search_escaped_text(self):
        ''' Searching for escaped text in the project and org/project endpoints
            returns expected results
        '''
        organization = OrganizationFactory(name=u"Code for San Francisco")
        ProjectFactory(organization_name=organization.name,
                       description=u'What\'s My \'District')
        ProjectFactory(organization_name=organization.name,
                       description=u'Cöde%%for%%Ameriça')
        db.session.commit()
        project_response = self.app.get(
            '/api/projects?q=What\'s My \'District')
        project_response = json.loads(project_response.data)
        assert isinstance(project_response['total'], int)
        assert isinstance(project_response['objects'], list)
        self.assertEqual(project_response['total'], 1)
        self.assertEqual(len(project_response['objects']), 1)

        org_project_response = self.app.get(
            "/api/organizations/Code-for-San-Francisco/projects?q='District")
        org_project_response = json.loads(org_project_response.data)
        assert isinstance(org_project_response['total'], int)
        assert isinstance(org_project_response['objects'], list)
        self.assertEqual(org_project_response['total'], 1)
        self.assertEqual(len(org_project_response['objects']), 1)

        project_response = self.app.get('/api/projects?q=%Ameriça')
        project_response = json.loads(project_response.data)
        assert isinstance(project_response['total'], int)
        assert isinstance(project_response['objects'], list)
        self.assertEqual(project_response['total'], 1)
        self.assertEqual(len(project_response['objects']), 1)

        org_project_response = self.app.get(
            "/api/organizations/Code-for-San-Francisco/projects?q=Cöde%")
        org_project_response = json.loads(org_project_response.data)
        assert isinstance(org_project_response['total'], int)
        assert isinstance(org_project_response['objects'], list)
        self.assertEqual(org_project_response['total'], 1)
        self.assertEqual(len(org_project_response['objects']), 1)
Пример #29
0
    def test_project_query_filter(self):
        '''
        Test that project query params work as expected.
        '''
        brigade = OrganizationFactory(name=u'Whatever', type=u'Brigade')
        brigade_somewhere_far = OrganizationFactory(name=u'Brigade Organization', type=u'Brigade, Code for All')
        web_project = ProjectFactory(name=u'Random Web App', type=u'web service')
        other_web_project = ProjectFactory(name=u'Random Web App 2', type=u'web service', description=u'Another')
        non_web_project = ProjectFactory(name=u'Random Other App', type=u'other service')

        web_project.organization = brigade
        non_web_project.organization = brigade_somewhere_far

        db.session.add(web_project)
        db.session.add(non_web_project)
        db.session.commit()

        response = self.app.get('/api/projects?type=web%20service')
        self.assertEqual(response.status_code, 200)
        response = json.loads(response.data)
        self.assertEqual(response['total'], 2)
        self.assertEqual(response['objects'][0]['name'], u'Random Web App')
        self.assertEqual(response['objects'][1]['name'], u'Random Web App 2')

        response = self.app.get('/api/projects?type=web%20service&description=Another')
        self.assertEqual(response.status_code, 200)
        response = json.loads(response.data)
        self.assertEqual(response['total'], 1)
        self.assertEqual(response['objects'][0]['name'], u'Random Web App 2')

        response = self.app.get('/api/projects?type=different%20service')
        self.assertEqual(response.status_code, 200)
        response = json.loads(response.data)
        self.assertEqual(response['total'], 0)

        response = self.app.get('/api/projects?organization_type=Code+for+All')
        self.assertEqual(response.status_code, 200)
        response = json.loads(response.data)
        self.assertEqual(response['total'], 1)
Пример #30
0
    def test_create_child_without_parent(self):
        ''' Test that children created without parents cannot be committed to the database
        '''
        test_passed = False
        project = ProjectFactory(organization_name=None)
        try:
            db.session.commit()
        except IntegrityError:
            test_passed = True

        self.assertTrue(test_passed)
        db.session.rollback()

        test_passed = False
        story = StoryFactory(organization_name=None)
        try:
            db.session.commit()
        except IntegrityError:
            test_passed = True

        self.assertTrue(test_passed)
        db.session.rollback()

        test_passed = False
        event = EventFactory(organization_name=None)
        try:
            db.session.commit()
        except IntegrityError:
            test_passed = True

        self.assertTrue(test_passed)
        db.session.rollback()

        test_passed = False
        issue = IssueFactory(project_id=None)
        try:
            db.session.commit()
        except IntegrityError:
            test_passed = True

        self.assertTrue(test_passed)
        db.session.rollback()

        test_passed = False
        label = LabelFactory(issue_id=None)
        try:
            db.session.commit()
        except IntegrityError:
            test_passed = True

        self.assertTrue(test_passed)
Пример #31
0
    def test_org_dont_show_issues(self):
        ''' Test that calls to /organizations dont return project issues '''
        from test.factories import OrganizationFactory, ProjectFactory, IssueFactory
        organization = OrganizationFactory()
        db.session.flush()

        project = ProjectFactory(organization_name=organization.name)
        db.session.flush()

        issue = IssueFactory(project_id=project.id)
        db.session.commit()

        response = self.app.get('/api/organizations')
        response = json.loads(response.data)
        for org in response['objects']:
            if org['current_projects']:
                self.assertFalse(isinstance(org['current_projects'][0]["issues"], list))
                break