def test_create_new_contract(self):
        # test that no additional properties works
        contract_data = dict(
            contract_type='test',
            description='test'
        )

        contract = create_new_contract(contract_data)
        self.assertEquals(ContractBase.query.count(), 1)
        self.assertEquals(
            ContractBase.query.first().description,
            contract.description
        )

        # test that additional properties also works
        contract_data_props = dict(
            contract_type='test',
            description='test2',
            properties=[
                dict(foo='bar'),
                dict(baz='qux')
            ]
        )

        contract_with_props = create_new_contract(contract_data_props)
        self.assertEquals(ContractBase.query.count(), 2)
        self.assertEquals(ContractProperty.query.count(), 2)
        self.assertEquals(
            ContractBase.query.all()[-1].description,
            contract_with_props.description
        )

        # this should fail with non-existing stage
        contract_data_fails = dict(
            contract_type='test',
            description='test2',
            current_stage_id=1
        )
        try:
            create_new_contract(contract_data_fails)
            # this should never work, so break the tests if we get here
            self.assertTrue(False)
        except:
            self.assertTrue(True)
    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)