Beispiel #1
0
    def setUp(self):
        super(BaseViewTestCase, self).setUp()

        self.client = Client()
        self.shareholder1 = ShareholderGenerator().generate()
        self.company = self.shareholder1.company
        self.operator = OperatorGenerator().generate(company=self.company)
        self.operator2 = OperatorGenerator().generate()
        self.shareholder2 = ShareholderGenerator().generate()
        self.position1 = PositionGenerator().generate(buyer=self.shareholder1)
        self.position2 = PositionGenerator().generate(buyer=self.shareholder2)
        self.optiontransaction1 = OptionTransactionGenerator().generate(
            buyer=self.shareholder1)
        self.optiontransaction2 = OptionTransactionGenerator().generate(
            buyer=self.shareholder2)
        self.optionplan = self.optiontransaction1.option_plan

        self.statement_report = mommy.make(ShareholderStatementReport,
                                           company=self.shareholder1.company)
        self.statement = mommy.make(ShareholderStatement,
                                    user=self.shareholder1.user,
                                    pdf_file='example.pdf',
                                    report=self.statement_report)

        # add company subscription
        self.add_subscription(self.company)

        self.shareholder1_url = reverse('shareholder',
                                        kwargs={'pk': self.shareholder1.pk})
Beispiel #2
0
    def setUp(self):
        self.shareholder = ShareholderGenerator().generate()
        self.company = self.shareholder.company
        self.position = PositionGenerator().generate(buyer=self.shareholder,
                                                     count=30,
                                                     vesting_months=24)
        self.option = OptionTransactionGenerator().generate(
            buyer=self.shareholder, count=16, vesting_months=120)

        # noise ... not to be fetched
        PositionGenerator().generate(buyer=self.shareholder, count=30)
        OptionTransactionGenerator().generate(buyer=self.shareholder, count=16)

        self.date_passed = (timezone.now() - relativedelta(years=2)).date()
        self.future_date = (timezone.now() + relativedelta(years=3)).date()

        # vesting expired
        PositionGenerator().generate(buyer=self.shareholder,
                                     count=30,
                                     bought_at=self.date_passed,
                                     vesting_months=6)
        OptionTransactionGenerator().generate(buyer=self.shareholder,
                                              count=16,
                                              bought_at=self.date_passed,
                                              vesting_months=6)
Beispiel #3
0
        def serialize(segments):
            operator = OperatorGenerator().generate()
            company = operator.company
            securities = TwoInitialSecuritiesGenerator().generate(
                company=company)
            security = securities[1]
            security.track_numbers = True
            security.save()
            position = PositionGenerator().generate(company=company,
                                                    number_segments=segments,
                                                    save=False,
                                                    security=security,
                                                    count=8)

            url = reverse('position-detail', kwargs={'pk': position.id})
            request = self.factory.get(url)
            request.user = operator.user

            # prepare data
            position.seller = None
            position.buyer = None
            # get test data dict
            data = PositionSerializer(position, context={
                'request': request
            }).data
            # clear bad datetimedata
            data['bought_at'] = '2014-01-01T10:00'
            del data['seller'], data['buyer']
            # feed data into serializer
            return PositionSerializer(data=data, context={'request': request})
Beispiel #4
0
 def __serialize(self, segments):
     # create capital
     bank = BankGenerator().generate()
     p = PositionGenerator().generate(number_segments=segments,
                                      count=8,
                                      seller=None)
     # position under test:
     position = PositionGenerator().generate(number_segments=segments,
                                             count=8,
                                             company=p.buyer.company,
                                             seller=p.buyer,
                                             save=False,
                                             security=p.security,
                                             depot_bank=bank)
     url = reverse('position-detail', kwargs={'pk': position.id})
     request = self.factory.get(url)
     # authenticated request
     request.user = OperatorGenerator().generate(
         company=position.buyer.company).user
     request.session = {'company_pk': position.buyer.company.pk}
     # prepare data
     data = PositionSerializer(position, context={'request': request}).data
     data['bought_at'] = '2024-01-01T10:00'
     return (PositionSerializer(data=data, context={'request':
                                                    request}), position)
Beispiel #5
0
    def test_split_shares_POST(self):
        operator = OperatorGenerator().generate()
        user = operator.user
        company = operator.company

        s1, s2 = TwoInitialSecuritiesGenerator().generate(
            company=operator.company)
        PositionGenerator().generate(company=operator.company, security=s1)
        PositionGenerator().generate(company=operator.company, security=s1)

        logged_in = self.client.login(username=user.username, password='******')
        self.assertTrue(logged_in)

        security = Security.objects.filter(company=company, title="P")[0]
        data = {
            'dividend': 3,
            'divisor': 4,
            "security": {
                "pk": security.pk,
                "readable_title": security.get_title_display(),
                "title": security.title
            },
            'execute_at': datetime.datetime.now(),
        }

        response = self.client.post(
            '/services/rest/split/', data, **{
                'HTTP_AUTHORIZATION': 'Token {}'.format(user.auth_token.key),
                'format': 'json'
            })

        self.assertEqual(response.status_code, 201)
Beispiel #6
0
 def setUp(self):
     self.shareholder = ShareholderGenerator().generate()
     self.company = self.shareholder.company
     self.position = PositionGenerator().generate(
         buyer=self.shareholder, count=30, vesting_months=24)
     self.option = OptionTransactionGenerator().generate(
         buyer=self.shareholder, count=16, vesting_months=120)
     self.mixin = DiscountedTaxByVestingModelMixin()
Beispiel #7
0
    def test_csv_download(self):
        """ rest download of captable csv """

        # data
        company = CompanyGenerator().generate()
        shareholder_list = []
        for x in range(1, 6):  # don't statt with 0, Generators 'if' will fail
            shareholder_list.append(ShareholderGenerator().generate(
                company=company, number=str(x)))

        # initial share creation
        PositionGenerator().generate(
            buyer=shareholder_list[0], count=1000, value=10)
        # single transaction
        PositionGenerator().generate(
            buyer=shareholder_list[1], count=10, value=10,
            seller=shareholder_list[0])
        # shareholder bought and sold
        PositionGenerator().generate(
            buyer=shareholder_list[2], count=20, value=20,
            seller=shareholder_list[0])
        PositionGenerator().generate(
            buyer=shareholder_list[0], count=20, value=20,
            seller=shareholder_list[2])

        # run test
        response = self.client.get(
            reverse('captable_csv', kwargs={"company_id": company.id}))

        # not logged in user
        self.assertEqual(response.status_code, 302)

        # login and retest
        user = UserGenerator().generate()
        OperatorGenerator().generate(user=user, company=company)
        is_loggedin = self.client.login(username=user.username, password='******')
        self.assertTrue(is_loggedin)
        response = self.client.get(reverse('captable_csv',
                                   kwargs={"company_id": company.id}))

        # assert response code
        self.assertEqual(response.status_code, 200)
        # assert proper csv
        lines = response.content.split('\r\n')
        lines.pop()  # remove last element based on final '\r\n'
        for row in lines:
            self.assertEqual(row.count(','), 7)
        self.assertEqual(len(lines), 3)  # ensure we have the right data
        # assert company itself
        self.assertEqual(shareholder_list[0].number, lines[1].split(',')[0])
        # assert share owner
        self.assertEqual(shareholder_list[1].number, lines[2].split(',')[0])
        # assert shareholder witout position not in there
        for line in lines:
            self.assertNotEqual(line[0], shareholder_list[3].number)
        # assert shareholder which bought and sold again
        for line in lines:
            self.assertNotEqual(line[0], shareholder_list[2].number)
Beispiel #8
0
    def test_share_percent(self):
        """
        proper share percent math
        """
        company = CompanyGenerator().generate(share_count=1000000)
        security = SecurityGenerator().generate(company=company)
        sc = ShareholderGenerator().generate(company=company)
        s1 = ShareholderGenerator().generate(company=company)
        s2 = ShareholderGenerator().generate(company=company)
        s3 = ShareholderGenerator().generate(company=company)
        now = datetime.datetime.now()

        PositionGenerator().generate(buyer=sc,
                                     count=1000000,
                                     value=100,
                                     security=security,
                                     bought_at=now -
                                     datetime.timedelta(days=11))
        PositionGenerator().generate(buyer=s1,
                                     seller=sc,
                                     count=500000,
                                     value=100,
                                     security=security,
                                     bought_at=now -
                                     datetime.timedelta(days=10))
        PositionGenerator().generate(buyer=s2,
                                     seller=sc,
                                     count=5000,
                                     value=100,
                                     security=security,
                                     bought_at=now -
                                     datetime.timedelta(days=9))
        PositionGenerator().generate(buyer=s3,
                                     seller=sc,
                                     count=50,
                                     value=100,
                                     security=security,
                                     bought_at=now -
                                     datetime.timedelta(days=8))

        self.assertEqual(s1.share_percent(), '99.00')
        self.assertEqual(s2.share_percent(), '0.99')
        self.assertEqual(s3.share_percent(), '0.01')

        PositionGenerator().generate(buyer=s2,
                                     seller=s1,
                                     count=250000,
                                     value=100,
                                     security=security,
                                     bought_at=now -
                                     datetime.timedelta(days=7))

        self.assertEqual(s1.share_percent(), '49.50')
Beispiel #9
0
    def test_csv_download_number_segments(self):
        """ rest download of captable csv """

        # data
        company = CompanyGenerator().generate()
        secs = TwoInitialSecuritiesGenerator().generate(company=company)
        security = secs[1]
        security.track_numbers = True
        security.save()

        shareholder_list = []
        for x in range(1, 6):  # don't statt with 0, Generators 'if' will fail
            shareholder_list.append(ShareholderGenerator().generate(
                company=company, number=str(x)))

        # initial share creation
        PositionGenerator().generate(
            buyer=shareholder_list[0], count=1000, value=10, security=security)
        # single transaction
        PositionGenerator().generate(
            buyer=shareholder_list[1], count=10, value=10, security=security,
            seller=shareholder_list[0])
        # shareholder bought and sold
        PositionGenerator().generate(
            buyer=shareholder_list[2], count=20, value=20, security=security,
            seller=shareholder_list[0])
        PositionGenerator().generate(
            buyer=shareholder_list[0], count=20, value=20, security=security,
            seller=shareholder_list[2])

        # login and retest
        user = UserGenerator().generate()
        OperatorGenerator().generate(user=user, company=company)
        is_loggedin = self.client.login(username=user.username, password='******')
        self.assertTrue(is_loggedin)
        response = self.client.get(reverse('captable_csv',
                                   kwargs={"company_id": company.id}))

        # assert response code
        self.assertEqual(response.status_code, 200)
        # assert proper csv
        lines = response.content.split('\r\n')
        lines.pop()  # remove last element based on final '\r\n'
        for row in lines:
            if row == lines[0]:  # skip first row
                continue
            self.assertEqual(row.count(','), 8)
            fields = row.split(',')
            s = Shareholder.objects.get(company=company, number=fields[0])
            text = s.current_segments(security)
            if text:
                self.assertTrue(text in fields[8])
Beispiel #10
0
    def test_xls_download_number_segments(self):
        """ rest download of captable xls """

        # data
        company = CompanyGenerator().generate()
        self.add_subscription(company)
        secs = TwoInitialSecuritiesGenerator().generate(company=company)
        security = secs[1]
        security.track_numbers = True
        security.save()

        shareholder_list = []
        for x in range(1, 6):  # don't statt with 0, Generators 'if' will fail
            shareholder_list.append(ShareholderGenerator().generate(
                company=company, number=str(x)))

        # initial share creation
        PositionGenerator().generate(buyer=shareholder_list[0],
                                     count=1000,
                                     value=10,
                                     security=security)
        # single transaction
        PositionGenerator().generate(buyer=shareholder_list[1],
                                     count=10,
                                     value=10,
                                     security=security,
                                     seller=shareholder_list[0])
        # shareholder bought and sold
        PositionGenerator().generate(buyer=shareholder_list[2],
                                     count=20,
                                     value=20,
                                     security=security,
                                     seller=shareholder_list[0])
        PositionGenerator().generate(buyer=shareholder_list[0],
                                     count=20,
                                     value=20,
                                     security=security,
                                     seller=shareholder_list[2])

        # login and retest
        report = ReportGenerator().generate(company=company, file_type='XLS')
        report.render()
        user = report.user
        OperatorGenerator().generate(user=user, company=company)
        self.client.force_login(user)
        response = self.client.get(
            reverse('reports:download', kwargs={"report_id": report.id}))

        # assert response code
        self.assertEqual(response.status_code, 200)
Beispiel #11
0
    def test_captable_xls_download(self):
        """ rest download of captable xls """

        # data
        company = CompanyGenerator().generate()
        shareholder_list = []
        for x in range(1, 6):  # don't statt with 0, Generators 'if' will fail
            shareholder_list.append(ShareholderGenerator().generate(
                company=company, number=str(x)))
        shareholder_list = sorted(shareholder_list,
                                  key=lambda t: t.user.last_name.lower())

        # initial share creation
        p = PositionGenerator().generate(seller=None,
                                         buyer=shareholder_list[0],
                                         count=1000,
                                         value=10)
        security = p.security
        # single transaction
        PositionGenerator().generate(buyer=shareholder_list[1],
                                     count=10,
                                     value=10,
                                     seller=shareholder_list[0],
                                     security=security)
        # shareholder bought and sold
        PositionGenerator().generate(buyer=shareholder_list[2],
                                     count=20,
                                     value=20,
                                     seller=shareholder_list[0],
                                     security=security)
        PositionGenerator().generate(buyer=shareholder_list[0],
                                     count=20,
                                     value=20,
                                     seller=shareholder_list[2],
                                     security=security)

        # login and retest
        report = ReportGenerator().generate(company=company, file_type='XLS')
        report.render()
        user = report.user
        OperatorGenerator().generate(user=user, company=company)
        self.add_subscription(company)
        self.client.force_login(user)
        response = self.client.get(
            reverse('reports:download', kwargs={"report_id": report.id}))

        # assert response code
        self.assertEqual(response.status_code, 200)
Beispiel #12
0
    def test_position_option_pdf(self):
        """ test printable certificate """
        pos = PositionGenerator().generate()
        company = pos.buyer.company
        # run test
        response = self.client.get(
            reverse('position_option_pdf', kwargs={"option_id": pos.pk}))

        # not logged in user
        self.assertEqual(response.status_code, 302)

        # login and retest
        user = UserGenerator().generate()
        OperatorGenerator().generate(user=user, company=company)
        self.add_subscription(company)
        is_loggedin = self.client.login(username=user.username,
                                        password=DEFAULT_TEST_DATA['password'])
        self.assertTrue(is_loggedin)
        # was 55
        with self.assertLessNumQueries(79):
            response = self.client.get(
                reverse('position_option_pdf', kwargs={"option_id": pos.pk}))

        # assert response code
        self.assertEqual(response.status_code, 200)
        # assert proper csv
        content = response.content
        self.assertTrue(content.startswith('%PDF-1'))
        self.assertTrue(content.endswith('EOF\n'))
Beispiel #13
0
    def test_delete_confirmed_position(self):
        """
        confirmed positions cannot be deleted
        """
        operator = OperatorGenerator().generate()
        user = operator.user
        position = PositionGenerator().generate(company=operator.company)
        position.is_draft = False
        position.save()

        logged_in = self.client.login(username=user.username, password='******')
        self.assertTrue(logged_in)

        res = self.client.delete('/services/rest/position/{}'.format(
            position.pk))

        self.assertEqual(res.status_code, 400)
Beispiel #14
0
class DiscountedTaxByVestingModelMixinTestCase(TestCase):

    def setUp(self):
        self.shareholder = ShareholderGenerator().generate()
        self.company = self.shareholder.company
        self.position = PositionGenerator().generate(
            buyer=self.shareholder, count=30, vesting_months=24)
        self.option = OptionTransactionGenerator().generate(
            buyer=self.shareholder, count=16, vesting_months=120)
        self.mixin = DiscountedTaxByVestingModelMixin()

    def test_get_vesting_expires_at(self):
        """ return date when vesting expires """
        today = timezone.now().date()
        self.assertEqual(
            self.position.get_vesting_expires_at(),
            today + relativedelta(years=2))
        self.assertEqual(
            self.option.get_vesting_expires_at(),
            today + relativedelta(years=10))

    def test_get_discounted_tax_ratio(self):
        """ return percent to be applied for discounted tax value calculation
        read: https://goo.gl/n5p0IR
        """
        passed_date = timezone.make_aware(datetime.datetime(2013, 1, 1)).date()
        future_date = timezone.now().date() + relativedelta(years=1)

        self.assertEqual(self.position.get_discounted_tax_ratio(), 0.89)
        self.assertEqual(self.position.get_discounted_tax_ratio(
            date=passed_date), 0)
        self.assertEqual(self.position.get_discounted_tax_ratio(
            date=future_date), 0.9434)

        self.assertEqual(self.option.get_discounted_tax_ratio(), 0.55839)
        self.assertEqual(self.option.get_discounted_tax_ratio(
            date=passed_date), 0)
        self.assertEqual(self.option.get_discounted_tax_ratio(
            date=future_date), 0.5919)

    def test_get_discounted_tax_value(self):
        """ return value to be used for discounted tax """
        self.assertEqual(self.position.get_discounted_tax_value(),
                         2670)
        self.assertEqual(self.option.get_discounted_tax_value(), 893.424)
Beispiel #15
0
 def setUp(self):
     self.operator = OperatorGenerator().generate()
     # initial position
     shareholder = ShareholderGenerator().generate(user=self.operator.user)
     PositionGenerator().generate(company=self.operator.company,
                                  number_segments=[u'0-9999'],
                                  buyer=shareholder,
                                  count=10000)
     TwoInitialSecuritiesGenerator().generate(company=self.operator.company)
Beispiel #16
0
    def test_render_captable_xls(self):
        report = ReportGenerator().generate(file_type='XLS',
                                            company=self.company)
        PositionGenerator().generate(company=report.company, seller=None)
        render_captable_xls(report.company.pk, report.pk,
                            user_id=report.user.pk, ordering=None,
                            notify=True, track_downloads=False)
        report.refresh_from_db()

        self.assertIsNotNone(report.file)
Beispiel #17
0
    def test_render_assembly_participation_pdf(self):
        report = ReportGenerator().generate(company=self.company)
        PositionGenerator().generate(company=report.company, seller=None)
        render_assembly_participation_pdf(
            report.company.pk, report.pk,
            user_id=report.user.pk, ordering=None,
            notify=True, track_downloads=False)
        report.refresh_from_db()

        self.assertIsNotNone(report.file)
Beispiel #18
0
    def test_render_vested_shares_pdf(self):
        report = ReportGenerator().generate(company=self.company,
                                            report_type='vested_shares',
                                            file_type='PDF')
        PositionGenerator().generate(company=report.company, seller=None)
        render_vested_shares_pdf(
            report.company.pk, report.pk,
            user_id=report.user.pk, ordering=None,
            notify=True, track_downloads=False)
        report.refresh_from_db()

        self.assertIsNotNone(report.file)
Beispiel #19
0
    def test_share_value(self):
        """
        share value is last trated price
        """
        company = CompanyGenerator().generate(share_count=1000000)
        security = SecurityGenerator().generate(company=company)
        sc = ShareholderGenerator().generate(company=company)
        s1 = ShareholderGenerator().generate(company=company)
        now = datetime.datetime.now()

        PositionGenerator().generate(buyer=sc,
                                     count=1000000,
                                     value=1,
                                     security=security,
                                     bought_at=now -
                                     datetime.timedelta(days=11))
        p = PositionGenerator().generate(buyer=s1,
                                         seller=sc,
                                         count=500000,
                                         value=100,
                                         security=security,
                                         bought_at=now -
                                         datetime.timedelta(days=10))
        p.value = None
        p.save()

        self.assertEqual(s1.share_value(), Decimal('500000.0000'))
Beispiel #20
0
    def test_csv_download_with_missing_operator(self):
        """ rest download of captable csv """

        # data
        company = CompanyGenerator().generate()
        shareholder_list = []
        for x in range(1, 6):  # don't statt with 0, Generators 'if' will fail
            shareholder_list.append(ShareholderGenerator().generate(
                company=company, number=str(x)))

        # initial share creation
        PositionGenerator().generate(
            buyer=shareholder_list[0], count=1000, value=10)
        # single transaction
        PositionGenerator().generate(
            buyer=shareholder_list[1], count=10, value=10,
            seller=shareholder_list[0])
        # shareholder bought and sold
        PositionGenerator().generate(buyer=shareholder_list[2], count=20,
                                     value=20, seller=shareholder_list[0])
        PositionGenerator().generate(buyer=shareholder_list[0], count=20,
                                     value=20, seller=shareholder_list[2])

        # run test
        response = self.client.get(
            reverse('captable_csv', kwargs={"company_id": company.id}))

        # not logged in user
        self.assertEqual(response.status_code, 302)

        # login and retest
        user = UserGenerator().generate()
        is_loggedin = self.client.login(username=user.username, password='******')
        self.assertTrue(is_loggedin)
        response = self.client.get(
            reverse('captable_csv', kwargs={"company_id": company.id}))

        # assert response code
        self.assertEqual(response.status_code, 403)
Beispiel #21
0
    def test_delete_position(self):
        """
        operator deletes position
        """
        operator = OperatorGenerator().generate()
        user = operator.user
        position = PositionGenerator().generate(company=operator.company)

        logged_in = self.client.login(username=user.username, password='******')
        self.assertTrue(logged_in)

        res = self.client.delete('/services/rest/position/{}'.format(
            position.pk))

        self.assertEqual(res.status_code, 204)
        self.assertFalse(Position.objects.filter(id=position.pk).exists())
Beispiel #22
0
 def __serialize(self, segments):
     position = PositionGenerator().generate(number_segments=segments,
                                             count=8)
     url = reverse('position-detail', kwargs={'pk': position.id})
     request = self.factory.get(url)
     # authenticated request
     request.user = OperatorGenerator().generate(
         company=position.buyer.company).user
     # prepare data
     data = PositionSerializer(position, context={'request': request}).data
     # clear bad datetimedata
     data['buyer']['user']['userprofile']['birthday'] = None
     data['seller']['user']['userprofile']['birthday'] = None
     data['bought_at'] = '2014-01-01T10:00'
     return (PositionSerializer(data=data, context={'request':
                                                    request}), position)
Beispiel #23
0
    def test_delete_position_shareholder(self):
        """
        shareholder cannot delete positions
        """

        operator = ShareholderGenerator().generate()
        user = operator.user
        position = PositionGenerator().generate(company=operator.company)

        logged_in = self.client.login(username=user.username, password='******')
        self.assertTrue(logged_in)

        res = self.client.delete('/services/rest/position/{}'.format(
            position.pk))

        self.assertEqual(res.status_code, 404)
Beispiel #24
0
    def test_get_is_certificate_valid(self):
        """
        is certificate valid or was it returned
        """
        pos = PositionGenerator().generate()
        pos.invalidate_certificate()
        pos2 = pos.certificate_invalidation_position

        serializer = PositionSerializer(instance=pos)
        self.assertFalse(serializer.get_is_certificate_valid(pos))
        self.assertFalse(serializer.get_is_certificate_valid(pos2))

        pos = PositionGenerator().generate()
        serializer = PositionSerializer(instance=pos)
        self.assertIsNone(serializer.get_is_certificate_valid(pos))

        pos = PositionGenerator().generate(certificate_id='123')
        serializer = PositionSerializer(instance=pos)
        self.assertTrue(serializer.get_is_certificate_valid(pos))
Beispiel #25
0
    def _prepare_split_scenario(self):
        company = CompanyGenerator().generate()
        security = SecurityGenerator().generate(company=company)
        cshareholder = ShareholderGenerator().generate(company=company)
        shareholder1 = ShareholderGenerator().generate(company=company)
        shareholder2 = ShareholderGenerator().generate(company=company)
        shareholder3 = ShareholderGenerator().generate(company=company)
        shareholder4 = ShareholderGenerator().generate(company=company)
        PositionGenerator().generate(buyer=cshareholder,
                                     count=10000,
                                     value=1000,
                                     security=security,
                                     seller=None)
        p1 = PositionGenerator().generate(buyer=shareholder1,
                                          count=100,
                                          value=20,
                                          seller=cshareholder,
                                          security=security)
        p2 = PositionGenerator().generate(buyer=shareholder2,
                                          count=200,
                                          value=40,
                                          seller=cshareholder,
                                          security=security)
        p3 = PositionGenerator().generate(buyer=shareholder3,
                                          count=900,
                                          value=60,
                                          seller=cshareholder,
                                          security=security)
        p4 = PositionGenerator().generate(buyer=cshareholder,
                                          count=600,
                                          value=80,
                                          seller=shareholder3,
                                          security=security)
        PositionGenerator().generate(buyer=cshareholder,
                                     count=1000,
                                     value=1000,
                                     security=security,
                                     seller=None)
        company.share_count = 11000
        company.save()

        return dict(company=company,
                    cshareholder=cshareholder,
                    shareholder1=shareholder1,
                    shareholder2=shareholder2,
                    shareholder3=shareholder3,
                    shareholder4=shareholder4,
                    p1=p1,
                    p2=p2,
                    p3=p3,
                    p4=p4,
                    security=security)
Beispiel #26
0
    def setUp(self):
        self.factory = RequestFactory()
        self.client = Client()
        self.session = self.client.session

        self.position = PositionGenerator().generate(seller=None)
        self.operator = OperatorGenerator().generate(
            company=self.position.buyer.company)

        add_company_to_session(self.session, self.operator.company)
        self.request = self.factory.get('/services/rest/position')
        self.request.user = self.operator.user
        self.request.session = self.session
        self.new_data = PositionSerializer(self.position,
                                           context={
                                               'request': self.request
                                           }).data
        self.new_data.update({'bought_at': '2013-05-05T00:00'})
Beispiel #27
0
    def test_get_certificate_invalidation_position_url(self):
        """
        return url for cert invalidation position
        """
        pos = PositionGenerator().generate()
        pos.invalidate_certificate()

        serializer = PositionSerializer(instance=pos)
        self.assertIsNotNone(
            serializer.get_certificate_invalidation_position_url(pos))

        pos = PositionGenerator().generate()
        serializer = PositionSerializer(instance=pos)
        self.assertIsNone(
            serializer.get_certificate_invalidation_position_url(pos))
Beispiel #28
0
 def __serialize(self, segments):
     seller = ShareholderGenerator().generate()
     option_plan = OptionPlanGenerator().generate(company=seller.company,
                                                  number_segments=segments,
                                                  count=8)
     PositionGenerator().generate(buyer=seller,
                                  count=8,
                                  number_segments=segments,
                                  security=option_plan.security)
     url = reverse('optionplan-detail', kwargs={'pk': option_plan.id})
     request = self.factory.get(url)
     request.user = OperatorGenerator().generate(
         company=option_plan.company).user
     # prepare data
     data = OptionPlanSerializer(option_plan, context={
         'request': request
     }).data
     # clear bad datetimedata
     data['board_approved_at'] = '2014-01-01'
     return (OptionPlanSerializer(data=data,
                                  context={'request':
                                           request}), option_plan)
Beispiel #29
0
    def test_confirm_position(self):

        operator = OperatorGenerator().generate()
        user = operator.user
        seller = ShareholderGenerator().generate(company=operator.company)
        position = PositionGenerator().generate(seller=seller)

        logged_in = self.client.login(username=user.username, password='******')
        self.assertTrue(logged_in)

        # get and prep data
        res = self.client.login(username=user.username, password='******')
        self.assertTrue(res)

        res = self.client.get('/services/rest/position/{}'.format(position.pk),
                              format='json')

        # update data
        res = self.client.post('/services/rest/position/{}/confirm'.format(
            position.pk), {},
                               format='json')

        self.assertEqual(res.status_code, 200)
        self.assertFalse(Position.objects.get(id=position.id).is_draft)
Beispiel #30
0
    def test_add_position_with_number_segment(self):
        """
        test that we can add a position with numbered shares
        """

        operator = OperatorGenerator().generate()
        user = operator.user

        buyer = ShareholderGenerator().generate(company=operator.company)
        seller = ShareholderGenerator().generate(company=operator.company)
        securities = TwoInitialSecuritiesGenerator().generate(
            company=operator.company)
        PositionGenerator().generate(number_segments=[u'1-5'],
                                     company=operator.company,
                                     buyer=seller,
                                     count=5,
                                     security=securities[1])

        for s in securities:
            s.track_numbers = True
            s.save()

        logged_in = self.client.login(username=user.username, password='******')
        self.assertTrue(logged_in)

        data = {
            "bought_at": "2016-05-13T23:00:00.000Z",
            "buyer": {
                "pk": buyer.pk,
                "user": {
                    "first_name": buyer.user.first_name,
                    "last_name": buyer.user.last_name,
                    "email": buyer.user.email,
                    "operator_set": [],
                    "userprofile": None,
                },
                "number": "0",
                "company": {
                    "pk":
                    operator.company.pk,
                    "name":
                    operator.company.name,
                    "share_count":
                    operator.company.share_count,
                    "country":
                    "",
                    "url":
                    "http://codingmachine:9000/services/rest/"
                    "company/{}".format(operator.company.pk),
                    "shareholder_count":
                    2
                },
                "share_percent": "99.90",
                "share_count": 100002,
                "share_value": 1000020,
                "validate_gafi": {
                    "is_valid": True,
                    "errors": []
                }
            },
            "security": {
                "pk": securities[1].pk,
                "readable_title": "Preferred Stock",
                "title": "P",
                "count": 3
            },
            "count": 5,
            "value": 1,
            "seller": {
                "pk": seller.pk,
                "user": {
                    "first_name": seller.user.first_name,
                    "last_name": seller.user.last_name,
                    "email": seller.user.email,
                    "operator_set": [],
                    "userprofile": None
                },
                "number": "0",
                "company": {
                    "pk": 5,
                    "name": "LieblingzWaldCompany AG",
                    "share_count": 100100,
                    "country": "",
                    "url": "http://codingmachine:9000/services/rest/company/5",
                    "shareholder_count": 2
                },
                "share_percent": "99.90",
                "share_count": 100002,
                "share_value": 1000020,
                "validate_gafi": {
                    "is_valid": True,
                    "errors": []
                }
            },
            "number_segments": "1,2,3-5",
            "comment": "sdfg"
        }

        response = self.client.post(
            '/services/rest/position', data, **{
                'HTTP_AUTHORIZATION': 'Token {}'.format(user.auth_token.key),
                'format': 'json'
            })

        self.assertEqual(response.status_code, 201)
        self.assertTrue('sdfg' in response.content)
        self.assertEqual(response.data['number_segments'], [u'1-5'])

        position = Position.objects.latest('id')
        self.assertEqual(position.count, 5)
        self.assertEqual(position.value, 1)
        self.assertEqual(position.buyer, buyer)
        self.assertEqual(position.seller, seller)
        self.assertEqual(position.bought_at.isoformat(), '2016-05-13')
        self.assertEqual(position.number_segments, [u'1-5'])