def create_opportunity(self, user):
     data = {
         'title':
         faker.word(),
         'description':
         faker.text(),
         'location':
         '{}, {}'.format(faker.city(), faker.country()),
         'exo_role':
         ExoRole.objects.get(code=COACH),
         'certification_required':
         CertificationRole.objects.get(code=CERT_COACH),
         'start_date':
         timezone.now() + timedelta(days=10),
         'duration':
         '1 week',
         'keywords': [],
         'entity':
         faker.company(),
         'questions': [{
             'title': faker.word()
         }]
     }
     opportunity = Opportunity.objects.create_opportunity(user, **data)
     return opportunity
Пример #2
0
    def test_unlock_achievement_reward(self):
        consultant = FakeConsultantFactory.create()

        user_achievement = Achievement.objects.create_reward_for_consultant(
            consultant=consultant,
            number_of_coins=10,
        )
        user_reward = UserReward.objects.filter(user=consultant.user).first()
        user = consultant.user
        user.profile_picture_origin = settings.EXO_ACCOUNTS_PROFILE_PICTURE_CH_USER
        user.location = faker.city() + ', ' + faker.country()
        user.about_me = faker.paragraph()
        user.save()
        user_achievement.refresh_from_db()
        user_reward.refresh_from_db()
        self.assertTrue(user_achievement.is_pending)
        self.assertTrue(user_reward.is_pending)
        for language in Language.objects.all():
            consultant.languages.add(language)
        for consultant_exo_attribute in ConsultantExOAttribute.objects.filter(
                consultant=consultant):
            consultant_exo_attribute.level = 3
            consultant_exo_attribute.save()

        for industry in Industry.objects.all()[:5]:
            consultant.industries.create(
                industry=industry,
                level=3,
            )
        user_achievement.refresh_from_db()
        user_reward.refresh_from_db()
        self.assertTrue(user_achievement.is_completed)
        self.assertTrue(user_reward.is_completed)
Пример #3
0
    def test_update_project(self):
        # PREPARE DATA
        self.client.login(
            username=self.user.username, password='******')
        url = reverse('api:project:project-detail', kwargs={'slug': self.sprint_automated.slug})
        timezone_workshop = 'UTC'
        place_id = 'ChIJgTwKgJcpQg0RaSKMYcHeNsQ'

        # DO ACTION
        data = {
            'name': faker.word(),
            'start': build_datetime(string_to_datetime('2018, 10, 10', custom_timezone='Europe/Madrid')),
            'end': build_datetime(string_to_datetime('2018, 10, 12', custom_timezone='Europe/Madrid')),
            'location': '{}, {}'.format(faker.city(), faker.country()),
            'place_id': place_id,
            'comment': faker.text(),
        }
        response = self.client.put(url, data=data)
        data = response.json()

        # ASSERTS
        self.assertTrue(status.is_success(response.status_code))
        self.sprint_automated.refresh_from_db()
        self.assertEqual(self.sprint_automated.name, data['name'])
        self.assertEqual(self.sprint_automated.comment, data['comment'])
        self.assertEqual(self.sprint_automated.location, data['location'])
        self.assertEqual(self.sprint_automated.place_id, place_id)
        self.assertEqual(self.sprint_automated.timezone.zone, timezone_workshop)
Пример #4
0
    def test_edit_project(self, mock_request, mock_email):
        # PREPARE DATA
        self.project.refresh_from_db()
        self.init_mock(mock_request)
        coach_role = self.project.project_roles.get(
            code=settings.EXO_ROLE_CODE_SPRINT_COACH)

        user = self.get_user()
        request_mock_account.add_mock(user,
                                      is_consultant=False,
                                      is_superuser=False)
        models.UserProjectRole.objects.create(project_role=coach_role,
                                              user=user)
        self.project.set_status(self.project.created_by,
                                settings.PROJECT_CH_STATUS_WAITING)
        mock_email.reset_mock()
        url = reverse('api:project-detail', kwargs={'pk': self.project.pk})

        # DO ACTION
        self.setup_credentials(self.super_user)
        data = {
            'name': faker.word(),
            'customer': faker.company(),
            'location': '{}, {}'.format(faker.city(), faker.country()),
            'place_id': faker.pyint(),
            'start':
            (self.project.start + timedelta(days=5)).strftime('%Y-%m-%d'),
        }
        response = self.client.put(url, data=data)

        # ASSERTS
        self.assertTrue(status.is_success(response.status_code))
        self.assertTrue(mock_email.called)
        self.assertEqual(mock_email.call_count, 2)
Пример #5
0
    def test_create_participants_api(self, mock_request):
        # PREPARE DATA
        self.init_mock(mock_request)
        self.setup_credentials(self.consultant_user)

        data = {
            'title':
            faker.sentence(),
            'sub_title':
            faker.sentence(),
            'description':
            faker.text(),
            'start':
            timezone.now().date(),
            'end':
            timezone.now().date(),
            'category':
            settings.EXO_ROLE_CATEGORY_OTHER,
            'follow_type':
            'P',
            'location':
            '{}, {}'.format(faker.city(), faker.country()),
            'url':
            faker.uri(),
            'languages': [faker.word()],
            'show_price':
            faker.boolean(),
            'amount':
            faker.numerify(),
            'currency': [*dict(settings.EVENT_CURRENCY_CHOICES).keys()
                         ][random.randint(0, 1)],
            'organizers': [
                {
                    'name': faker.name(),
                    'email': faker.email(),
                    'url': faker.uri()
                },
            ],
            'participants': [{
                'uuid': self.consultant_user.uuid.__str__(),
                'exo_role': settings.EXO_ROLE_CODE_OTHER_SPEAKER,
                'order': 1,
            }]
        }

        url = reverse('api:event:api-root')

        # DO ACTION
        response = self.client.post(url, data=data, format='json')

        # ASSERTS
        event = Event.objects.first()
        self.assertTrue(status.is_success(response.status_code))
        self.assertEqual(event.participants.count(), 1)
Пример #6
0
class FakeOpportunityFactory(factory.django.DjangoModelFactory):

    title = factory.LazyAttribute(lambda x: faker.text(max_nb_chars=20))
    description = factory.LazyAttribute(lambda x: faker.text())
    location = factory.LazyAttribute(
        lambda x: '{}, {}'.format(faker.city(), faker.country()))
    exo_role = factory.LazyAttribute(lambda o: ExORole.objects.get(
        code=settings.EXO_ROLE_CODE_SPRINT_COACH))
    certification_required = factory.LazyAttribute(
        lambda o: CertificationRole.objects.get(
            code=settings.EXO_ROLE_CODE_CERTIFICATION_SPRINT_COACH))
    start_date = factory.fuzzy.FuzzyDate(datetime.date.today())
    deadline_date = factory.fuzzy.FuzzyDate(datetime.date.today())
    duration_unity = factory.fuzzy.FuzzyChoice(
        dict(settings.OPPORTUNITIES_DURATION_UNITY_CHOICES).keys(), )
    duration_value = faker.random_digit_not_null()
    entity = factory.LazyAttribute(lambda x: faker.company())
    keywords = []
    languages = []
    budget = factory.LazyAttribute(lambda x: faker.pyint())
    budget_currency = settings.OPPORTUNITIES_CH_CURRENCY_DOLLAR
    virtual_budget = factory.LazyAttribute(lambda x: faker.pyint())
    virtual_budget_currency = settings.OPPORTUNITIES_CH_CURRENCY_EXOS

    class Meta:
        model = Opportunity

    @classmethod
    def _create(cls, model_class, *args, **kwargs):
        """Override the default ``_create`` with our custom call."""
        manager = cls._get_manager(model_class)

        if not kwargs.get('user_from'):
            raise Exception('User is required')

        # The default would use ``manager.create(*args, **kwargs)``
        budgets = []

        if kwargs.get('budget'):
            budgets.append({
                'budget': kwargs.get('budget'),
                'currency': kwargs.get('budget_currency')
            })

        if kwargs.get('virtual_budget'):
            budgets.append({
                'budget': kwargs.get('virtual_budget').__str__(),
                'currency': kwargs.get('virtual_budget_currency')
            })

        kwargs['budgets'] = budgets

        return manager.create_opportunity(*args, **kwargs)
Пример #7
0
    def test_create_request_api(self, mock_request):
        # PREPARE DATA
        self.init_mock(mock_request)
        self.setup_credentials(self.super_user)

        keywords = [
            {'name': faker.word() + faker.numerify()},
            {'name': faker.word() + faker.numerify()},
        ]
        data = {
            'title': faker.word(),
            'description': faker.text(),
            'mode': settings.OPPORTUNITIES_CH_MODE_ONSITE,
            'location': '{}, {}'.format(faker.city(), faker.country()),
            'exo_role': ExORole.objects.get(code=COACH).code,
            'certification_required': CertificationRole.objects.get(code=CERT_COACH).code,
            'start_date': timezone.now().date(),
            'duration_unity': settings.OPPORTUNITIES_DURATION_UNITY_DAY,
            'duration_value': 2,
            'keywords': keywords,
            'entity': faker.company(),
            'budget': 222,
            'budget_currency': settings.OPPORTUNITIES_CH_CURRENCY_EUR,
            'virtual_budget': 222.55,
            'questions': [
                {
                    'title': faker.text(),
                },
                {
                    'title': faker.text(),
                }
            ]
        }
        url = reverse('api:opportunity-list')

        # DO ACTION
        response = self.client.post(url, data=data)
        response_data = response.json()

        # ASSERTS
        self.assertTrue(status.is_success(response.status_code))
        opportunity = models.Opportunity.objects.get(
            pk=response_data['pk'])
        self.assertEqual(
            opportunity.questions.count(),
            2
        )
        self.assertTrue(
            models.Question.objects.filter(
                type_question=settings.OPPORTUNITIES_QUESTION_CH_TYPE_DEFAULT
            ).exists()
        )
Пример #8
0
    def test_workshop_reminder_email(self, mock_notify_manager_task, mock_task,
                                     mock_request):
        # PREPARE DATA
        self.init_mock(mock_request)
        data = {
            'title':
            faker.sentence(),
            'sub_title':
            faker.sentence(),
            'description':
            faker.text(),
            'start':
            timezone.now().date(),
            'end':
            timezone.now().date(),
            'category':
            Category.objects.get(code=settings.EXO_ROLE_CATEGORY_WORKSHOP),
            'follow_type':
            settings.EVENT_CH_FOLLOW_MODE_DEFAULT,
            'location':
            '{}, {}'.format(faker.city(), faker.country()),
            'url':
            faker.uri(),
            'languages': [faker.word()],
            'show_price':
            faker.boolean(),
            'amount':
            faker.numerify(),
            'currency':
            settings.EVENT_CH_CURRENCY_EUR,
            'organizers': [
                {
                    'name': faker.name(),
                    'email': faker.email(),
                    'url': faker.uri()
                },
            ],
            'participants': [],
            'user_from':
            self.super_user,
        }

        # DO ACTION
        Event.objects.create_event(force_retrieve_user_data=True, **data)

        # ASSERTS
        self.assertTrue(mock_task.called)
Пример #9
0
 def get_api_data(self, users=[]):
     keywords = [
         {'name': faker.word() + faker.numerify()},
         {'name': faker.word() + faker.numerify()},
     ]
     data = {
         'title': faker.word(),
         'description': faker.text(),
         'mode': settings.OPPORTUNITIES_CH_MODE_ONSITE,
         'location': '{}, {}'.format(faker.city(), faker.country()),
         'exo_role': ExORole.objects.get(code=settings.EXO_ROLE_CODE_OTHER_OTHER).code,
         'other_category_name': faker.word(),
         'other_role_name': faker.word(),
         'certification_required': None,
         'due_date': timezone.now().date(),
         'deadline_date': (timezone.now() + timedelta(days=10)).date(),
         'duration_unity': settings.OPPORTUNITIES_DURATION_UNITY_DAY,
         'duration_value': 2,
         'num_positions': 2,
         'keywords': keywords,
         'entity': faker.company(),
         'files': [{
             'filestack_status': 'Stored',
             'url': 'https://cdn.filestackcontent.com/Lr59QG8oQRWliC6x70cx',
             'filename': 'gato.jpg',
             'mimetype': 'image/jpeg'}],
         'budgets': [
             {
                 'currency': settings.OPPORTUNITIES_CH_CURRENCY_EUR,
                 'budget': '{}.0'.format(int(faker.numerify()))
             },
             {
                 'currency': settings.OPPORTUNITIES_CH_CURRENCY_EXOS,
                 'budget': '{}.0'.format(int(faker.numerify()))
             },
         ]
     }
     if users:
         data['target'] = settings.OPPORTUNITIES_CH_TARGET_FIXED
         data['users_tagged'] = [
             {'user': user.uuid.__str__()} for user in users
         ]
     return data
Пример #10
0
class FakeProjectFactory(django.DjangoModelFactory):
    class Meta:
        model = Project

    name = factory.LazyAttribute(lambda x: faker.word() + faker.numerify())
    customer = factory.SubFactory(
        'customer.faker_factories.FakeCustomerFactory')
    start = factory.LazyAttribute(
        lambda x: faker.date_time(tzinfo=string_to_timezone('utc')), )
    duration = 3
    lapse = settings.PROJECT_LAPSE_WEEK
    agenda = factory.LazyAttribute(lambda x: faker.url())
    created_by = factory.SubFactory(FakeUserFactory)
    location = factory.LazyAttribute(
        lambda x: '{}, {}'.format(faker.city(), faker.country()))
    timezone = factory.LazyAttribute(lambda x: faker.timezone())

    @factory.post_generation
    def consultants(self, created, extracted, **kwargs):
        if not created:
            return None

        if extracted:
            for consultant in extracted:
                new_consultant = FakeConsultantProjectRoleFactory(
                    project=self,
                    consultant=consultant,
                )
                new_consultant.save()

    @factory.post_generation
    def partners(self, created, extracted, **kwargs):
        if not created:
            return None

        if extracted:
            for partner in extracted:
                new_partner = FakePartnerProjectRoleFactory(
                    project=self,
                    partner=partner,
                )
                new_partner.save()
Пример #11
0
 def get_sow_data(self):
     return {
         'title': faker.text(),
         'description': faker.text(),
         'mode': settings.OPPORTUNITIES_CH_MODE_DEFAULT,
         'location': faker.city(),
         'start_date': datetime.date.today(),
         'end_date': datetime.date.today() + datetime.timedelta(days=20),
         'duration_unity': settings.OPPORTUNITIES_DURATION_UNITY_DAY,
         'duration_value': 2,
         'start_time': faker.time(),
         'timezone': faker.timezone(),
         'entity': faker.name(),
         'budgets': [
             {
                 'budget': '222',
                 'currency': settings.OPPORTUNITIES_CH_CURRENCY_DOLLAR
             }
         ],
     }
Пример #12
0
    def test_edit_service_sprint_from_django_form(self, mock):
        # PREPARE DATA
        sprint = FakeSprintAutomatedFactory()
        new_date = '2013-01-01 10:00:00'
        sprint_form = SprintSimpleForm(instance=sprint)
        data = sprint_form.initial
        data['start'] = new_date
        data['agenda'] = ''
        data['location'] = faker.city()
        data['timezone'] = faker.timezone()
        data['place_id'] = faker.pyint()
        url = reverse('project:project:dashboard',
                      kwargs={'project_id': sprint.id})
        self.client.login(username=self.super_user.username, password='******')

        # DO ACTION
        response = self.client.post(url, data=data, format='json')

        # ASSERTS
        self.assertTrue(status.is_success(response.status_code))
Пример #13
0
class FakeProjectFactory(django.DjangoModelFactory):
    class Meta:
        model = Project

    uuid = factory.LazyAttribute(lambda x: faker.uuid4())
    name = factory.LazyAttribute(lambda x: faker.word())
    description = factory.LazyAttribute(lambda x: faker.text())
    start = factory.LazyAttribute(
        lambda x: faker.date_time(tzinfo=string_to_timezone('utc')))
    location = factory.LazyAttribute(
        lambda x: '{}, {}'.format(faker.city(), faker.country()))
    status = settings.PROJECT_CH_STATUS_DRAFT
    content_template = settings.PROJECT_CH_PROJECT_TEMPLATE_DEFAULT
    customer = factory.LazyAttribute(lambda x: faker.company())

    @classmethod
    def _create(cls, model_class, *args, **kwargs):
        """Override the default ``_create`` with our custom call."""
        manager = cls._get_manager(model_class)
        if not kwargs.get('created_by'):
            raise Exception('User is required')
        return manager.create_project(*args, **kwargs)