def test_create_new_company(self):
        # assert that creating a normal company should work
        company_data = dict(
            company_name='company one'
        )

        company = create_new_company(company_data)
        self.assertEquals(
            Company.query.first().company_name,
            company.company_name
        )

        # assert that creating a company with an
        # existing contract should work
        contract = insert_a_contract()
        company_with_contract_data = dict(
            company_name='company two',
            contracts=[contract]
        )
        create_new_company(company_with_contract_data)
        self.assertEquals(Company.query.count(), 2)
        self.assertEquals(
            Company.query.all()[-1].contracts[0].id,
            contract.id
        )

        # assert that creating a company with an existing
        # contract by id should work
        company_with_contract_id_data = dict(
            company_name='company three',
            contracts=[contract.id]
        )
        create_new_company(company_with_contract_id_data)
        self.assertEquals(Company.query.count(), 3)

        # assert that nonexistant contracts can't be assigned
        # to a company
        company_with_bad_contract_data = dict(
            company_name='company four',
            contracts=[999]
        )
        self.assertRaises(
            Exception, create_new_company, company_with_bad_contract_data
        )
        self.assertEquals(Company.query.count(), 3)

        company_with_bad_contract_data_two = dict(
            company_name='company four',
            contracts=[None]
        )
        self.assertRaises(
            Exception, create_new_company, company_with_bad_contract_data_two
        )
        self.assertEquals(Company.query.count(), 3)

        # assert that you can't have duplicate names
        self.assertRaises(
            IntegrityError, create_new_company, company_data
        )
    def test_import_line_items(self):
        '''
        Test that award information is scraped properly.
        '''
        muni = create_new_company(
            dict(company_name='U.S. Municipal Supply, Inc.'))
        chemung = create_new_company(
            dict(company_name='Chemung Supply Corporation'))
        pathmaster = create_new_company(
            dict(company_name='Path Master, Inc., Co.'))

        new_contract = create_new_contract(
            dict(properties=[dict(key='foo', value='6965')],
                 description='foo'))

        with open(
                current_app.config.get('PROJECT_ROOT') +
                '/purchasing_test/mock/award.html', 'r') as f:
            line_item_page = BeautifulSoup(f.read(),
                                           from_encoding='windows-1252')

        _line_items = grab_line_items(line_item_page)
        self.assertEquals(len(_line_items), 14)

        contract = get_contract('Sign Post, Square Tubes, Brackets, Etc.',
                                'IFB-6965')
        self.assertTrue(contract is not None)
        self.assertEquals(contract.id, new_contract.id)

        save_line_item(_line_items, contract)

        self.assertEquals(LineItem.query.count(), len(_line_items))
        # assert that our ids made it in property
        for item in LineItem.query.all():
            self.assertTrue(item.manufacturer is not None)
            self.assertTrue(item.model_number is not None)
            self.assertEquals(item.contract_id, contract.id)
            if 'muni' in item.company_name.lower():
                self.assertEquals(item.company_id, muni.id)
            elif 'chem' in item.company_name.lower():
                self.assertEquals(item.company_id, chemung.id)
            else:
                self.assertEquals(item.company_id, pathmaster.id)
    def test_import_line_items(self):
        '''
        Test that award information is scraped properly.
        '''
        muni = create_new_company(dict(company_name='U.S. Municipal Supply, Inc.'))
        chemung = create_new_company(dict(company_name='Chemung Supply Corporation'))
        pathmaster = create_new_company(dict(company_name='Path Master, Inc., Co.'))

        new_contract = create_new_contract(
            dict(properties=[dict(key='foo', value='6965')], description='foo')
        )

        with open(current_app.config.get('PROJECT_ROOT') + '/purchasing_test/mock/award.html', 'r') as f:
            line_item_page = BeautifulSoup(
                f.read(), from_encoding='windows-1252'
            )

        _line_items = grab_line_items(line_item_page)
        self.assertEquals(len(_line_items), 14)

        contract = get_contract(
            'Sign Post, Square Tubes, Brackets, Etc.',
            'IFB-6965'
        )
        self.assertTrue(contract is not None)
        self.assertEquals(contract.id, new_contract.id)

        save_line_item(_line_items, contract)

        self.assertEquals(LineItem.query.count(), len(_line_items))
        # assert that our ids made it in property
        for item in LineItem.query.all():
            self.assertTrue(item.manufacturer is not None)
            self.assertTrue(item.model_number is not None)
            self.assertEquals(item.contract_id, contract.id)
            if 'muni' in item.company_name.lower():
                self.assertEquals(item.company_id, muni.id)
            elif 'chem' in item.company_name.lower():
                self.assertEquals(item.company_id, chemung.id)
            else:
                self.assertEquals(item.company_id, pathmaster.id)
    def test_create_new_company(self):
        # assert that creating a normal company should work
        company_data = dict(company_name='company one')

        company = create_new_company(company_data)
        self.assertEquals(Company.query.first().company_name,
                          company.company_name)

        # assert that creating a company with an
        # existing contract should work
        contract = insert_a_contract()
        company_with_contract_data = dict(company_name='company two',
                                          contracts=[contract])
        create_new_company(company_with_contract_data)
        self.assertEquals(Company.query.count(), 2)
        self.assertEquals(Company.query.all()[-1].contracts[0].id, contract.id)

        # assert that creating a company with an existing
        # contract by id should work
        company_with_contract_id_data = dict(company_name='company three',
                                             contracts=[contract.id])
        create_new_company(company_with_contract_id_data)
        self.assertEquals(Company.query.count(), 3)

        # assert that nonexistant contracts can't be assigned
        # to a company
        company_with_bad_contract_data = dict(company_name='company four',
                                              contracts=[999])
        self.assertRaises(Exception, create_new_company,
                          company_with_bad_contract_data)
        self.assertEquals(Company.query.count(), 3)

        company_with_bad_contract_data_two = dict(company_name='company four',
                                                  contracts=[None])
        self.assertRaises(Exception, create_new_company,
                          company_with_bad_contract_data_two)
        self.assertEquals(Company.query.count(), 3)

        # assert that you can't have duplicate names
        self.assertRaises(IntegrityError, create_new_company, company_data)