예제 #1
0
파일: test_views.py 프로젝트: ngvtuan/darg
    def test_get_option_holders(self):
        op = OperatorGenerator().generate()
        opts = []
        for x in range(0, 10):
            opts.append(
                OptionTransactionGenerator().generate(company=op.company))

        self.client.force_authenticate(user=op.user)
        res = self.client.get(
            reverse('company-option-holder', kwargs={'pk': op.company.pk}))

        self.assertEqual(res.status_code, 200)
        self.assertEqual(len(res.data['results']), 10)

        # sell one persions options and check again
        ot = opts[0]
        OptionTransactionGenerator().generate(company=ot.option_plan.company,
                                              seller=ot.buyer,
                                              count=ot.count,
                                              price=1,
                                              buyer=opts[1].buyer)

        res = self.client.get(
            reverse('company-option-holder',
                    kwargs={'pk': ot.option_plan.company.pk}))

        self.assertEqual(res.status_code, 200)
        self.assertEqual(len(res.data['results']), 9)
예제 #2
0
 def __serialize(self, segments):
     seller = ShareholderGenerator().generate()
     option_plan = OptionPlanGenerator().generate(company=seller.company,
                                                  number_segments=segments)
     # initial seeding
     OptionTransactionGenerator().generate(number_segments=segments,
                                           count=8,
                                           option_plan=option_plan,
                                           buyer=seller,
                                           seller=None)
     # to test transaction
     position = OptionTransactionGenerator().generate(
         number_segments=segments,
         count=8,
         seller=seller,
         option_plan=option_plan,
         save=False)
     url = reverse('optiontransaction-detail', kwargs={'pk': position.id})
     request = self.factory.get(url)
     request.user = OperatorGenerator().generate(
         company=option_plan.company).user
     # prepare data
     data = OptionTransactionSerializer(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-01'
     return (OptionTransactionSerializer(data=data,
                                         context={'request':
                                                  request}), position)
예제 #3
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)
예제 #4
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})
예제 #5
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()
예제 #6
0
파일: test_views.py 프로젝트: ngvtuan/darg
    def test_confirm_optiontransaction(self):

        operator = OperatorGenerator().generate()
        user = operator.user
        seller = ShareholderGenerator().generate(company=operator.company)
        optiontransaction = OptionTransactionGenerator().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/optiontransaction/{}'.format(
            optiontransaction.pk),
                              format='json')

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

        self.assertEqual(res.status_code, 200)
        self.assertFalse(
            OptionTransaction.objects.get(id=optiontransaction.id).is_draft)
예제 #7
0
    def test_option_pdf(self):
        """ test printable certificate """
        ot = OptionTransactionGenerator().generate()
        company = ot.option_plan.company
        # run test
        response = self.client.get(
            reverse('option_pdf', kwargs={"option_id": ot.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 53
        with self.assertLessNumQueries(78):
            response = self.client.get(
                reverse('option_pdf', kwargs={"option_id": ot.pk}))

        # assert response code
        self.assertEqual(response.status_code, 200)
        # assert proper csv
        content = response.content
        self.assertTrue(content.startswith('%PDF'))
        self.assertTrue(content.endswith('EOF\n'))
예제 #8
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)
예제 #9
0
파일: test_views.py 프로젝트: ngvtuan/darg
    def test_delete_confirmed_optiontransaction(self):
        """
        confirmed positions cannot be deleted
        """
        operator = OperatorGenerator().generate()
        user = operator.user
        optiontransaction = OptionTransactionGenerator().generate(
            company=operator.company)
        optiontransaction.is_draft = False
        optiontransaction.save()

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

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

        self.assertEqual(res.status_code, 400)
예제 #10
0
    def test_validate_certificate_id(self):
        """ certificate id must be unique """
        serializer, position = self.__serialize('1, 3, 4, 6-9, 33')
        certificate_id = '222'
        self.assertEqual(serializer.validate_certificate_id(certificate_id),
                         certificate_id)
        # OptionTransaction existing -> fail
        ot = OptionTransactionGenerator().generate(
            certificate_id=certificate_id, company=position.buyer.company)
        with self.assertRaises(ValidationError):
            serializer.validate_certificate_id(certificate_id)
        ot.delete()

        # Position existing -> fail
        position.certificate_id = certificate_id
        position.save()
        with self.assertRaises(ValidationError):
            serializer.validate_certificate_id(certificate_id)
예제 #11
0
    def test_current_options_segments_same_day_single_digit(self):
        """
        very simple scenario with one CS and one shareholder
        """
        company = CompanyGenerator().generate()
        OperatorGenerator().generate(company=company)

        # intial securities
        s1, s2 = TwoInitialSecuritiesGenerator().generate(company=company)
        s1.track_numbers = True
        s1.number_segments = [1, 2, 3, 4]
        s1.save()

        # initial company shareholder
        cs = CompanyShareholderGenerator().generate(company=company,
                                                    security=s1)
        s = ShareholderGenerator().generate(company=company)
        optionplan = OptionPlanGenerator().generate(company=company,
                                                    number_segments=[1, 2],
                                                    security=s1)
        # initial option grant to CompanyShareholder
        OptionTransactionGenerator().generate(company=company,
                                              security=s1,
                                              buyer=cs,
                                              number_segments=[1, 2],
                                              option_plan=optionplan)
        # single shareholder option grant
        OptionTransactionGenerator().generate(company=company,
                                              security=s1,
                                              buyer=s,
                                              seller=cs,
                                              number_segments=[1],
                                              option_plan=optionplan)

        self.assertEqual(s.current_options_segments(s1), [1])

        # test company shareholder
        self.assertEqual(cs.current_options_segments(s1), [2])
예제 #12
0
파일: test_views.py 프로젝트: ngvtuan/darg
    def test_delete_optiontransaction_shareholder(self):
        """
        shareholder cannot delete positions
        """

        operator = ShareholderGenerator().generate()
        user = operator.user
        optiontransaction = OptionTransactionGenerator().generate(
            company=operator.company)

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

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

        self.assertEqual(res.status_code, 404)
예제 #13
0
파일: test_views.py 프로젝트: ngvtuan/darg
    def test_delete_option_transaction(self):
        """
        operator deletes position
        """
        operator = OperatorGenerator().generate()
        user = operator.user
        optiontransaction = OptionTransactionGenerator().generate(
            company=operator.company)

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

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

        self.assertEqual(res.status_code, 204)
        self.assertFalse(
            OptionTransaction.objects.filter(id=optiontransaction.pk).exists())
예제 #14
0
    def setUp(self):
        self.factory = RequestFactory()
        self.client = Client()
        self.session = self.client.session

        self.transaction = OptionTransactionGenerator().generate()
        self.operator = OperatorGenerator().generate(
            company=self.transaction.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 = OptionTransactionSerializer(self.transaction,
                                                    context={
                                                        'request': self.request
                                                    }).data
        self.new_data.update({'bought_at': '2013-05-05'})