Exemple #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})
Exemple #2
0
    def test_get(self):

        # mock get_queryset
        self.view.get_queryset = mock.Mock(return_value=Company.objects.none())

        operator = OperatorGenerator().generate()

        self.view.request = self.factory.get('/')
        self.view.request.user = operator.user

        with self.assertRaises(Http404):
            self.view.get(self.view.request)

        self.view.get_queryset = mock.Mock(return_value=Company.objects.filter(
            pk=operator.company_id))

        res = self.view.get(self.view.request)
        self.assertEqual(res.status_code, 302)  # redirect

        # add another company/operator to user
        operator2 = OperatorGenerator().generate(user=operator.user)
        self.view.get_queryset = mock.Mock(return_value=Company.objects.filter(
            pk__in=[operator.company_id, operator2.company_id]))

        res = self.view.get(self.view.request)
        self.assertEqual(res.status_code, 200)

        # test allow_empty False
        self.view.allow_empty = False
        self.view.get_paginate_by = mock.Mock(return_value=True)
        with mock.patch.object(self.view,
                               'get_queryset',
                               return_value=Company.objects.none()):
            with self.assertRaises(Http404):
                self.view.get(self.view.request)
Exemple #3
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)
Exemple #4
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})
Exemple #5
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'))
Exemple #6
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)
Exemple #7
0
    def test_add_new_shareholder(self):
        """ addes a new shareholder and user and checks for special chars"""

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

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

        data = {
            u"user": {
                u"first_name": u"Mike2Grüße",
                u"last_name": u"Hildebrand2Grüße",
                u"email": u"*****@*****.**",
            },
            u"number": u"10002"
        }

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

        self.assertNotEqual(response.data.get('pk'), None)
        self.assertTrue(isinstance(response.data.get('user'), dict))
        self.assertEqual(response.data.get('number'), u'10002')
        self.assertEqual(User.objects.filter(email=user.email).count(), 1)

        # check proper db status
        user = User.objects.get(email="*****@*****.**")
Exemple #8
0
    def test_owns_segments_rma_performance(self):
        """
        speed of segment owning check to meet RMA data
        """
        logger.info('preparing test...')
        operator = OperatorGenerator().generate()
        sec1, sec2 = TwoInitialSecuritiesGenerator().generate(
            company=operator.company)
        sec1.track_numbers = True
        sec1.number_segments = [u"1-10000000"]
        sec1.save()

        cs = CompanyShareholderGenerator().generate(security=sec1,
                                                    company=operator.company)

        logger.info('data preparation done.')

        start = datetime.datetime.now()
        res = cs.owns_segments([u'1-582912'], sec1)
        end = datetime.datetime.now()
        delta = end - start
        self.assertTrue(res[0])
        if delta > datetime.timedelta(seconds=4):
            logger.error(
                'BUILD performance error: test_owns_segments_rma_performance',
                extra={'delta': delta})
        self.assertLess(delta, datetime.timedelta(seconds=7))
Exemple #9
0
    def test_add_duplicate_new_shareholder(self):
        """
        adds a new shareholder with same id"""

        operator = OperatorGenerator().generate()
        shareholder = ShareholderGenerator().generate(company=operator.company)
        user = operator.user

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

        data = {
            u"user": {
                u"first_name": u"Mike2Grüße",
                u"last_name": u"Hildebrand2Grüße",
                u"email": u"*****@*****.**",
            },
            u"number": shareholder.number
        }

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

        self.assertEqual(response.status_code, 400)
        self.assertEqual(response.data.get('number'), [
            u'Diese Aktion\xe4rsnummer wird bereits verwendet. Bitte '
            u'w\xe4hlen Sie eine andere.'
        ])
Exemple #10
0
    def test_get(self):

        company = CompanyGenerator().generate()
        customer = company.get_customer()
        self.assertEqual(customer.subscriber, company)
        operator = OperatorGenerator().generate(company=company)

        view_url = reverse('djstripe:confirm',
                           args=[operator.company_id, 'test'])
        subscribe_url = reverse('djstripe:subscribe', args=[company.pk])

        req = self.factory.get(view_url)
        req.user = operator.user
        req.resolver_match = resolve(view_url)
        view_kwargs = dict(company_id=operator.company_id)
        self.view.request = req

        res = self.view.get(req, **view_kwargs)
        self.assertEqual(res.status_code, 302)
        self.assertEqual(res.url, subscribe_url)

        # test success
        self.view.kwargs = dict(plan='test')

        res = self.view.get(req, **view_kwargs)
        self.assertEqual(res.status_code, 200)

        # test already subscribed
        self.add_subscription(company)

        res = self.view.get(req, **view_kwargs)
        self.assertEqual(res.status_code, 302)
        self.assertEqual(res.url, subscribe_url)
Exemple #11
0
    def test_add_shareholder_for_existing_user_account(self):
        """ test to add a shareholder for an existing
        user account. means shareholder
        was added for another or same company already. means we don't
        add another user object
        """

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

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

        data = {
            "user": {
                "first_name": "Mike",
                "last_name": "Hildebrand",
                "email": "*****@*****.**",
            },
            "number": "1000"
        }

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

        self.assertNotEqual(response.data.get('pk'), None)
        self.assertTrue(isinstance(response.data.get('user'), dict))
        self.assertEqual(response.data.get('number'), u'1000')
        self.assertEqual(User.objects.filter(email=user.email).count(), 1)

        # check proper db status
        user = User.objects.get(email="*****@*****.**")
Exemple #12
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)
Exemple #13
0
    def test_add_shareholder_with_existing_number(self):
        """
        add shareholder with existing number
        """
        op = OperatorGenerator().generate()
        self.add_subscription(op.company)
        user = UserGenerator().generate()
        shareholder = ShareholderGenerator().generate(company=op.company)
        user.email = None

        try:
            start = page.StartPage(self.selenium, self.live_server_url,
                                   op.user)
            # wait for list
            start.wait_until_visible((By.CSS_SELECTOR, '#shareholder_list'))
            start.is_properly_displayed()
            self.assertEqual(
                start.has_shareholder_count(),
                Shareholder.objects.filter(company=op.company).count())
            start.click_open_add_shareholder()
            start.wait_until_modal_opened('addShareholder')
            start.add_shareholder(user, number=shareholder.number)
            start.click_save_add_shareholder()
            start.close_modal('addShareholder')
            time.sleep(2)

            self.assertEqual(
                Shareholder.objects.filter(company=op.company,
                                           number=shareholder.number).count(),
                1)

        except Exception, e:
            self._handle_exception(e)
Exemple #14
0
 def setUp(self):
     self.client = Client()
     self.report = ReportGenerator().generate()
     self.report.render()
     self.operator = OperatorGenerator().generate(
         user=self.report.user, company=self.report.company)
     self.other_user = UserGenerator().generate()
Exemple #15
0
    def test_authenticate(self):
        """ authenticate, get token, and call for shareholder details """

        # prepare test data
        operator = OperatorGenerator().generate()
        shareholder = ShareholderGenerator().generate(company=operator.company)
        user = operator.user
        user.set_password('test')
        user.save()

        # authenticate
        response = self.client.post('/services/rest/api-token-auth/', {
            'username': user.username,
            'password': '******'
        },
                                    format='json')

        self.assertEqual(response.data.get('token'), user.auth_token.key)

        # get shareholder details
        token = user.auth_token
        response = self.client.get(
            '/services/rest/shareholders', **{
                'HTTP_AUTHORIZATION': 'Token {}'.format(token.key),
                'format': 'json'
            })

        self.assertTrue(len(response.data.get('results')) == 1)
        self.assertEqual(
            response.data['results'][0].get('user').get('userprofile').get(
                'birthday'),
            shareholder.user.userprofile.birthday.strftime('%Y-%m-%d'))
Exemple #16
0
    def test_send_statement_report_operator_notify(self, mock_mail_admins,
                                                   mock_email_message_send,
                                                   mock_email_multi_send):
        company = CompanyGenerator().generate()
        mommy.make(ShareholderStatementReport, company=company,
                   report_date=now().date())

        send_statement_report_operator_notify()
        mock_mail_admins.assert_called()
        mock_mail_admins.reset_mock()

        OperatorGenerator().generate(company=company)

        with self.settings(EMAIL_BACKEND='dummy'):
            send_statement_report_operator_notify()
            mock_email_multi_send.assert_called()

        djrill_settings = {
            'EMAIL_BACKEND': 'djrill',
            'MANDRILL_SHAREHOLDER_STATEMENT_REPORT'
            '_OPERATOR_NOTIFY_TEMPLATE': 'foo'
        }
        with self.settings(**djrill_settings):
            send_statement_report_operator_notify()
            mock_email_message_send.assert_called()

        mock_email_multi_send.return_value = 0
        send_statement_report_operator_notify()
        mock_mail_admins.assert_called()
Exemple #17
0
    def test_add_operator_foreign_company(self):
        operator = OperatorGenerator().generate()
        user = operator.user
        company = CompanyGenerator().generate()
        user2 = UserGenerator().generate()

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

        data = {
            "company":
            "http://{}/services/rest/company/"
            "{}".format(self.site.domain, company.pk),
            u"user": {
                'email': user2.email
            }
        }

        self.assertFalse(user2.operator_set.filter(company=company).exists())

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

        self.assertEqual(response.status_code, 400)
        self.assertTrue('company' in response.content)
Exemple #18
0
    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)
Exemple #19
0
    def test_save_number_segments(self):
        company = CompanyGenerator().generate()
        operator = OperatorGenerator().generate(company=company)
        security = SecurityGenerator().generate(company=company)
        url = reverse('security-detail', kwargs={'pk': security.id})
        request = self.factory.get(url)

        data = SecuritySerializer(security, context={'request': request}).data
        data.update({'number_segments': '1,2,3,4,8-10'})

        self.client.force_authenticate(user=operator.user)

        res = self.client.put(url, data=data)

        security = Security.objects.get(id=security.id)
        self.assertEqual(security.number_segments, [u'1-4', u'8-10'])

        data.update({'number_segments': '1,2,3,4,4,,8-10'})

        res = self.client.put(url, data=data)

        self.assertEqual(res.status_code, 200)

        security = Security.objects.get(id=security.id)
        self.assertEqual(security.number_segments, [u'1-4', u'8-10'])
Exemple #20
0
    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)
Exemple #21
0
    def test_dispatch(self):
        req = self.factory.get('/')

        # test authentication
        req.user = AnonymousUser()
        res = self.mixin.dispatch(req)
        self.assertEqual(res.status_code, 302)

        operator = OperatorGenerator().generate()
        # mock mixin.get_company
        self.mixin.get_company = Mock(return_value=operator.company)

        req.user = UserGenerator().generate()
        res = self.mixin.dispatch(req)
        self.assertEqual(res.status_code, 302)

        # check company operator
        res = self.mixin.dispatch(req)
        self.assertEqual(res.status_code, 302)

        # set operator user
        req.user = operator.user
        # expecting "success": 'super' object has no attribute 'dispatch'
        with self.assertRaises(AttributeError):
            self.mixin.dispatch(req)
Exemple #22
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)
Exemple #23
0
    def test_delete_operator(self):
        operator = OperatorGenerator().generate()
        operator2 = OperatorGenerator().generate(company=operator.company)
        user = operator.user

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

        data = {u"operator.id": operator2.id}

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

        self.assertEqual(response.status_code, 204)
        self.assertFalse(Operator.objects.filter(pk=operator2.pk).exists())
Exemple #24
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)
Exemple #25
0
 def setUp(self):
     self.operator = OperatorGenerator().generate()
     TwoInitialSecuritiesGenerator().generate(company=self.operator.company)
     self.company_shareholder = CompanyShareholderGenerator().generate(
         company=self.operator.company)
     self.buyer = ShareholderGenerator().generate(
         company=self.operator.company)
     self.seller = ShareholderGenerator().generate(
         company=self.operator.company)
Exemple #26
0
    def test_split_shares(self):
        """
        share split leaves value, percent unchanged but
        increases share count per shareholder
        """
        # test data
        company = CompanyGenerator().generate(share_count=1000)
        OperatorGenerator().generate(company=company)
        shareholders, security = ComplexShareholderConstellationGenerator()\
            .generate(company=company)

        data = {
            'execute_at': datetime.datetime.now(),
            'dividend': 3,
            'divisor': 7,
            'comment': "Some random comment",
            'security': security,
        }
        multiplier = float(data['divisor']) / float(data['dividend'])
        company_share_count = company.share_count

        # record initial shareholder asset status
        assets = {}
        for shareholder in shareholders:
            assets.update({
                shareholder.pk: {
                    'count': shareholder.share_count(),
                    'value': shareholder.share_value(),
                    'percent': shareholder.share_percent()
                }
            })

        # run
        company.split_shares(data)

        # asserts by checking overall shareholder situation
        # means each shareholder should have now more shares but some
        # overall stock value

        for shareholder in shareholders:
            self.assertEqual(
                shareholder.share_count(),
                round(assets[shareholder.pk]['count'] * multiplier))
            self.assertEqual(round(shareholder.share_value()),
                             assets[shareholder.pk]['value'])
            self.assertEqual(round(float(shareholder.share_percent()), 2),
                             float(assets[shareholder.pk]['percent']))

        self.assertEqual(company.share_count,
                         round(company_share_count * multiplier))

        self.assertEquals(len(mail.outbox), 1)
        self.assertEquals(
            mail.outbox[0].subject,
            u"Ihre Liste gespaltener Aktienanrechte f\xfcr das Unternehmen "
            u"'{}'".format(company.name))
Exemple #27
0
    def test_send_statement_generation_operator_notify(self, mock_mail_admins,
                                                       mock_email_message_send,
                                                       mock_email_multi_send,
                                                       mock_render_pdf):
        company = CompanyGenerator().generate()
        company.is_statement_sending_enabled = True
        company.statement_sending_date = now().date()
        company.save()

        # no subscription
        send_statement_generation_operator_notify()
        mock_mail_admins.assert_not_called()
        mock_email_message_send.assert_not_called()
        mock_email_multi_send.assert_not_called()

        # add subscription
        self.add_subscription(company)

        # no operators
        send_statement_generation_operator_notify()
        mock_mail_admins.assert_called()
        mock_email_message_send.assert_not_called()
        mock_email_multi_send.assert_not_called()

        OperatorGenerator().generate(company=company)

        with self.settings(EMAIL_BACKEND='dummy'):
            send_statement_generation_operator_notify()
            mock_email_multi_send.assert_called()

        djrill_settings = {
            'EMAIL_BACKEND': 'djrill',
            'MANDRILL_SHAREHOLDER_STATEMENT_OPERATOR_NOTIFY_TEMPLATE': 'foo'
        }
        with self.settings(**djrill_settings):
            send_statement_generation_operator_notify()
            mock_email_message_send.assert_called()

        mock_mail_admins.reset_mock()
        mock_email_multi_send.reset_mock()

        mock_render_pdf.return_value = 'PDFCONTENT'
        with mock.patch('shareholder.tasks.'
                        'EmailMultiAlternatives.attach') as mock_attach:
            send_statement_generation_operator_notify()
            mock_attach.assert_called()
            mock_attach.reset_mock()

            mock_render_pdf.side_effect = Exception
            send_statement_generation_operator_notify()
            mock_attach.assert_not_called()

        mock_mail_admins.assert_not_called()
        mock_email_multi_send.return_value = 0
        send_statement_generation_operator_notify()
        mock_mail_admins.assert_called()
Exemple #28
0
    def setUp(self):
        super(HasSubscriptionPermissionTestCase, self).setUp()

        self.factory = RequestFactory()
        self.permission = HasSubscriptionPermission()
        self.operator = OperatorGenerator().generate()
        # steal session from client: http://stackoverflow.com/a/37307406/1270058
        self.session = self.client.session
        self.session['company_pk'] = self.operator.company.pk
        self.session.save()
Exemple #29
0
    def test_get_queryset(self):
        self.view.request = self.factory.get('/')

        # non-operator
        self.view.request.user = UserGenerator().generate()
        self.assertEqual(len(self.view.get_queryset()), 0)

        # operator
        self.view.request.user = OperatorGenerator().generate().user
        self.assertEqual(len(self.view.get_queryset()), 1)
Exemple #30
0
    def test_ticket_8(self):
        """ adding shareholder with user and userprofile for the same user for
        many companies/registers

        means we will create 3 companies, with 3 operators and each will add the
        same shareholder for its company.

        then login as the shareholder and check what happened and what is shown
        """
        ops = []
        ops.append(OperatorGenerator().generate())
        ops.append(OperatorGenerator().generate())
        ops.append(OperatorGenerator().generate())
        user = UserGenerator().generate()

        try:
            for op in ops:
                start = page.StartPage(
                    self.selenium, self.live_server_url, op.user)
                start.is_properly_displayed()
                start.has_shareholder_count(Shareholder.objects.filter(
                    company=op.company).count())
                start.click_open_add_shareholder()
                start.add_shareholder(user)
                start.click_save_add_shareholder()
                start.has_shareholder_count(Shareholder.objects.filter(
                    company=op.company).count())

            # shareholder now, no shareholder login yet
            # start = page.StartPage(
            #    self.selenium, self.live_server_url, user)
            # start.is_properly_displayed()

            time.sleep(2)
            self.assertEqual(user.shareholder_set.count(), 3)
            for op in ops:
                self.assertEqual(
                    user.shareholder_set.filter(company=op.company).count(), 1)

        except Exception, e:
            self._handle_exception(e)