Example #1
0
    def test_change_unknown_command(self):
        entity = mommy.make(models.Entity, is_single_contact=False)
        contact = mommy.make(models.Contact, entity=entity)
        entity2 = mommy.make(models.Entity, is_single_contact=True)

        url = reverse('crm_change_contact_entity', args=[contact.id])
        data= {
            'option': 555,
        }
        response = self.client.post(url, data=data, follow=True)
        self.assertEqual(response.status_code, 200)

        errors = BeautifulSoup(response.content).select('.field-error')
        self.assertEqual(len(errors), 1)

        contact = models.Contact.objects.get(id=contact.id)
        self.assertEqual(contact.entity, entity)
Example #2
0
 def test_view_change_contact_entity_single(self):
     entity = mommy.make(models.Entity, is_single_contact=True)
     contact = mommy.make(models.Contact, entity=entity)
     url = reverse('crm_change_contact_entity', args=[contact.id])
     response = self.client.get(url, follow=True)
     self.assertEqual(response.status_code, 200)
     soup = BeautifulSoup(response.content)
     expected = [
         self.OPTION_ADD_TO_EXISTING_ENTITY,
         #self.OPTION_CREATE_NEW_ENTITY,
         #self.OPTION_SWITCH_SINGLE_CONTACT,
         self.OPTION_SWITCH_ENTITY_CONTACT
     ]
     self.assertEqual(
         [x["value"] for x in soup.select("select option")],
         ["0"]+[str(x) for x in expected]
     )
Example #3
0
    def test_change_contact_entity_invalid_value(self):
        entity = mommy.make(models.Entity, is_single_contact=False)
        contact = mommy.make(models.Contact, entity=entity)

        url = reverse('crm_change_contact_entity', args=[contact.id])
        data= {
            'option': self.OPTION_ADD_TO_EXISTING_ENTITY,
            'entity': 'AAA',
        }
        response = self.client.post(url, data=data, follow=True)
        self.assertEqual(response.status_code, 200)

        errors = BeautifulSoup(response.content).select('.field-error')
        self.assertEqual(len(errors), 1)

        contact = models.Contact.objects.get(id=contact.id)
        self.assertEqual(contact.entity, entity)
Example #4
0
    def test_search_email_full(self):
        """search full emai address"""
        entity1 = mommy.make(models.Entity, name="My tiny corp")
        contact1 = mommy.make(models.Contact,
                              email="*****@*****.**",
                              entity=entity1,
                              lastname="ABCD",
                              main_contact=True,
                              has_left=False)
        contact3 = mommy.make(models.Contact,
                              entity=entity1,
                              lastname="IJKL",
                              main_contact=True,
                              has_left=False)

        entity2 = mommy.make(models.Entity,
                             name="Other corp",
                             email="*****@*****.**")
        contact2 = mommy.make(models.Contact,
                              entity=entity2,
                              lastname="WXYZ",
                              main_contact=True,
                              has_left=False)
        contact4 = mommy.make(models.Contact,
                              entity=entity2,
                              lastname="RTYU",
                              main_contact=True,
                              has_left=False)

        url = reverse('search')

        data = {"gr0-_-contact_entity_email-_-0": "*****@*****.**"}

        response = self.client.post(url, data=data)
        self.assertEqual(200, response.status_code)

        soup = BeautifulSoup(response.content)
        self.assertEqual(0, len(soup.select('.field-error')))

        self.assertNotContains(response, entity1.name)
        self.assertNotContains(response, contact1.lastname)
        self.assertNotContains(response, contact3.lastname)

        self.assertContains(response, entity2.name)
        self.assertContains(response, contact2.lastname)
        self.assertContains(response, contact4.lastname)
Example #5
0
    def test_search_custom_pagination_less(self):
        """less than custom number, it should not display pagination"""

        entities = [mommy.make(models.Entity, name="tiny{0:02d}#".format(i)) for i in range(10)]

        url = reverse('search')

        data = {"gr0-_-entity_name-_-0": 'tiny'}

        response = self.client.post(url, data=data)
        self.assertEqual(200, response.status_code)

        soup = BeautifulSoup(response.content)
        self.assertEqual(0, len(soup.select('ul.pagination')))

        for entity in entities:
            self.assertContains(response, entity.name)
Example #6
0
    def test_search_city_entity(self, cities=None, data=None):
        """search by city of the entity"""
        if cities:
            city1 = cities[0]
            city2 = cities[1]
        else:
            city1 = mommy.make(models.City, name="ZooPark")
            city2 = mommy.make(models.City, name="VodooPark")

        entity1 = mommy.make(models.Entity, city=city1)
        contact1 = entity1.default_contact
        contact1.lastname = "ABCDEFGH"
        contact1.main_contact = True
        contact1.has_left = False
        contact1.save()

        contact3 = mommy.make(models.Contact,
                              entity=entity1,
                              lastname="IJKLMNOP",
                              main_contact=True,
                              has_left=False)

        entity2 = mommy.make(models.Entity, city=city2)
        contact2 = entity2.default_contact
        contact2.lastname = "DEFGHIJKL"
        contact2.main_contact = True
        contact2.has_left = False
        contact2.save()

        url = reverse('search')

        data = data or {"gr0-_-city-_-0": city1.id}

        response = self.client.post(url, data=data)
        self.assertEqual(200, response.status_code)

        soup = BeautifulSoup(response.content)
        self.assertEqual(0, len(soup.select('.field-error')))

        self.assertContains(response, entity1.name)
        self.assertContains(response, contact1.lastname)
        self.assertContains(response, contact3.lastname)

        self.assertNotContains(response, entity2.name)
        self.assertNotContains(response, contact2.lastname)
Example #7
0
    def test_search_zipcode(self):
        """search zipcode"""
        city1 = mommy.make(models.City, name="ZooPark")
        city2 = mommy.make(models.City, name="VodooPark")

        entity1 = mommy.make(models.Entity)
        contact1 = entity1.default_contact
        contact1.lastname = "ABCDEFGH"
        contact1.main_contact = True
        contact1.has_left = False
        contact1.city = city1
        contact1.zip_code = "42810"
        contact1.save()

        contact3 = mommy.make(models.Contact,
                              entity=entity1,
                              lastname="IJKLMNOP",
                              main_contact=True,
                              has_left=False)

        entity2 = mommy.make(models.Entity)
        contact2 = entity2.default_contact
        contact2.lastname = "DEFGHIJKL"
        contact2.main_contact = True
        contact2.has_left = False
        contact2.city = city2
        contact2.zip_code = "26100"
        contact2.save()

        url = reverse('search')

        data = {"gr0-_-zip_code-_-0": "42"}

        response = self.client.post(url, data=data)
        self.assertEqual(200, response.status_code)

        soup = BeautifulSoup(response.content)
        self.assertEqual(0, len(soup.select('.field-error')))

        self.assertContains(response, entity1.name)
        self.assertContains(response, contact1.lastname)
        self.assertNotContains(response, contact3.lastname)

        self.assertNotContains(response, entity2.name)
        self.assertNotContains(response, contact2.lastname)
Example #8
0
    def test_action_no_menu(self):
        """test action is displayed if no custom menu"""
        action_type1 = mommy.make(models.ActionType)

        action = mommy.make(models.Action, type=action_type1)
        entity = mommy.make(models.Entity)
        action.entities.add(entity)
        action.save()

        url = reverse('crm_view_entity', args=[entity.id])
        response = self.client.get(url)

        self.assertEqual(response.status_code, 200)

        soup = BeautifulSoup(response.content)

        li_tags = soup.select('.ut-custom-action-menu-item')
        self.assertEqual(len(li_tags), 0)
    def test_show_carousel_context_var(self):
        """display an album"""

        media_filer = mommy.make(MediaFilter, name='Album Homepage')
        image = mommy.make(Image, _create_files=True)
        image.filters.add(media_filer)
        image.save()

        template_content = '''
        {% load coop_utils %}
        {% coop_image_list album_name as homepage_album %}
        {% include "test/carousel.html" with image_list=homepage_album %}')
        '''
        tpl = Template(template_content)
        html = tpl.render(Context({'album_name': 'Album Homepage'}))

        soup = BeautifulSoup(html)
        self.assertEqual(1, len(soup.select('img')))
Example #10
0
    def test_view_update_emailing_lang(self):
        """check the display of the page"""
        emailing = mommy.make(Emailing)

        url = reverse("emailing_update_emailing", kwargs={'pk': emailing.id})

        response = self.client.get(url)

        self.assertEqual(200, response.status_code)

        soup = BeautifulSoup(response.content)

        self.assertEqual(3, len(soup.select("select#id_lang option")))
        self.assertEqual('', soup.select("select#id_lang option")[0]["value"])
        self.assertEqual('en',
                         soup.select("select#id_lang option")[1]["value"])
        self.assertEqual('fr',
                         soup.select("select#id_lang option")[2]["value"])
Example #11
0
    def test_edit_entity_keep_notes(self):
        """test misisng fields nor changed"""
        entity = mommy.make(models.Entity, is_single_contact=False, notes="Toto")
        url = reverse('crm_edit_entity', args=[entity.id])
        data = {
            'name': 'Dupond SA',
        }
        response = self.client.post(url, data=data)
        self.assertEqual(200, response.status_code)
        errors = BeautifulSoup(response.content).select('.field-error')
        self.assertEqual(len(errors), 0)
        next_url = reverse('crm_view_entity', args=[entity.id])
        self.assertContains(response, "<script>")
        self.assertContains(response, next_url)

        entity = models.Entity.objects.get(id=entity.id)
        self.assertEqual(entity.name, data['name'])
        self.assertEqual(entity.notes, 'Toto')
Example #12
0
    def test_post_clone_no_type(self):
        """it should not clone and show error"""
        action_type_1 = mommy.make(models.ActionType)
        action_type_2 = mommy.make(models.ActionType)
        action_type_1.next_action_types.add(action_type_2)
        action_type_1.save()

        action = mommy.make(models.Action, type=action_type_1)

        data = {'action_type': ''}

        response = self.client.post(reverse('crm_clone_action',
                                            args=[action.id]),
                                    data=data)
        self.assertEqual(200, response.status_code)
        soup = BeautifulSoup(response.content)
        self.assertEqual(len(soup.select(".error-msg")), 1)
        self.assertEqual(1, models.Action.objects.count())
Example #13
0
    def test_create_action_calculated_amount(self):
        """create with calculated amount"""
        action_type = mommy.make(ActionType, is_amount_calculated=False)
        mommy.make(models.StoreManagementActionType,
                   action_type=action_type,
                   show_amount_as_pre_tax=False)
        action_type = ActionType.objects.get(id=action_type.id)
        self.assertEqual(action_type.is_amount_calculated, True)

        url = reverse('crm_create_action_of_type', args=[0, 0, action_type.id])
        response = self.client.get(url)
        self.assertEqual(200, response.status_code)

        soup = BeautifulSoup(response.content)
        fields = soup.select("#id_amount")
        self.assertEqual(len(fields), 1)

        self.assertEqual(fields[0]["disabled"], "disabled")
Example #14
0
    def test_create_contact(self):
        """create a contact: check user is set as last_modified_by"""
        url = reverse('crm_add_single_contact')
        data = {
            'lastname': "Doe",
            'firstname': 'John',
        }
        response = self.client.post(url, data=data, follow=True)
        self.assertEqual(response.status_code, 200)
        errors = BeautifulSoup(response.content).select('.field-error')
        self.assertEqual(len(errors), 0)

        self.assertEqual(models.Contact.objects.count(), 1)
        john_doe = models.Contact.objects.all()[0]
        self.assertEqual(john_doe.lastname, "Doe")
        self.assertEqual(john_doe.firstname, "John")
        self.assertEqual(john_doe.entity.is_single_contact, True)
        self.assertEqual(john_doe.last_modified_by, self.user)
Example #15
0
    def test_view_clone_action_1_type(self):
        """it should display hidden input for the only allowed type"""
        action_type_1 = mommy.make(models.ActionType)
        action_type_2 = mommy.make(models.ActionType)
        action_type_1.next_action_types.add(action_type_2)
        action_type_1.save()

        action = mommy.make(models.Action, type=action_type_1)

        response = self.client.get(
            reverse('crm_clone_action', args=[action.id]))
        self.assertEqual(200, response.status_code)
        soup = BeautifulSoup(response.content)
        html_fields = soup.select("#id_action_type")
        self.assertEqual(1, len(html_fields))
        self.assertEqual(html_fields[0]["type"], "hidden")
        self.assertEqual(html_fields[0]["value"],
                         "{0}".format(action_type_2.id))
Example #16
0
 def test_view_new_link_two_sites(self):
     mommy.make(Site)
     url = reverse('coop_cms_new_link')
     self._log_as_editor()
     response = self.client.get(url)
     self.assertEqual(200, response.status_code)
     self.assertEqual(Link.objects.count(), 0)
     soup = BeautifulSoup(response.content)
     self.assertEqual(1, len(soup.select("input#id_title")))
     self.assertEqual(1, len(soup.select("input#id_url")))
     self.assertEqual(1, len(soup.select("input#id_sites_0")))
     self.assertEqual(1, len(soup.select("input#id_sites_1")))
     elt1 = soup.select("input#id_sites_0")[0]
     elt2 = soup.select("input#id_sites_1")[0]
     for elt in (elt1, elt2):
         # Only the current site is checked
         self.assertEqual('checked' in elt,
                          elt["value"] == settings.SITE_ID)
Example #17
0
    def test_search_no_pagination(self):
        """less than default number, it should not display pagination"""
        del settings.BALAFON_SEARCH_NB_IN_PAGE  # use default settings

        entities = [mommy.make(models.Entity, name="tiny{0:02d}#".format(i)) for i in range(50)]

        url = reverse('search')

        data = {"gr0-_-entity_name-_-0": 'tiny'}

        response = self.client.post(url, data=data)
        self.assertEqual(200, response.status_code)

        soup = BeautifulSoup(response.content)
        self.assertEqual(0, len(soup.select('ul.pagination')))

        for entity in entities:
            self.assertContains(response, entity.name)
Example #18
0
    def test_search_contact_or_entity_modified_by(self):
        """by modification"""

        user1 = mommy.make(models.User, is_staff=True, is_active=True)
        user2 = mommy.make(models.User, is_staff=True, is_active=True)

        contact1 = mommy.make(
            models.Contact, lastname="ABCD", email="*****@*****.**", main_contact=True, has_left=False,
            last_modified_by=None
        )
        contact1.entity.name = 'Tiny Corp'
        contact1.entity.default_contact.delete()
        contact1.entity.last_modified_by = user1
        contact1.entity.save()

        contact2 = mommy.make(
            models.Contact, lastname="IJKL", email="*****@*****.**", main_contact=True, has_left=False,
            last_modified_by=user1
        )
        contact2.entity.name = 'Other Corp'
        contact2.entity.default_contact.delete()
        contact2.entity.save()

        contact3 = mommy.make(
            models.Contact, lastname="MNOP", email="*****@*****.**", main_contact=True, has_left=False,
            last_modified_by=None
        )
        contact3.entity.name = 'Big Corp'
        contact3.entity.default_contact.delete()
        contact3.entity.last_modified_by = user2
        contact3.entity.save()

        url = reverse('search')

        data = {"gr0-_-contacts_and_entities_modified_by-_-0": user1.id}

        response = self.client.post(url, data=data)
        self.assertEqual(200, response.status_code)
        soup = BeautifulSoup(response.content)
        self.assertEqual(0, len(soup.select('.field-error')))

        self.assertContains(response, contact1.email)
        self.assertContains(response, contact2.email)
        self.assertNotContains(response, contact3.email)
Example #19
0
    def test_edit_entity(self):
        """edit entity"""
        entity = mommy.make(models.Entity, is_single_contact=False)
        url = reverse('crm_edit_entity', args=[entity.id])
        data = {
            'name': 'Dupond SA',
            'city': models.City.objects.get(name="Paris").id,
        }
        response = self.client.post(url, data=data)
        self.assertEqual(200, response.status_code)
        errors = BeautifulSoup(response.content).select('.field-error')
        self.assertEqual(len(errors), 0)
        next_url = reverse('crm_view_entity', args=[entity.id])
        self.assertContains(response, "<script>")
        self.assertContains(response, next_url)

        entity = models.Entity.objects.get(id=entity.id)
        self.assertEqual(entity.name, data['name'])
        self.assertEqual(entity.city.id, data['city'])
Example #20
0
    def test_open_search(self):
        """test open an existing search"""

        group1 = mommy.make(models.Group)

        search = mommy.make(Search)
        search_group = mommy.make(SearchGroup, name="gr0", search=search)
        mommy.make(
            SearchField, field='group', value='{0}'.format(group1.id), is_list=False, search_group=search_group
        )

        url = reverse("search", args=[search.id])

        response = self.client.get(url)

        self.assertEqual(response.status_code, 200)
        soup = BeautifulSoup(response.content)

        self.assertEqual(soup.select("input[name=gr0-_-group-_-0]")[0]["value"], '{0}'.format(group1.id))
Example #21
0
    def test_action_menu_status(self):
        """test custom menus are displayed"""
        action_type1 = mommy.make(models.ActionType)
        action_status1 = mommy.make(models.ActionStatus)
        action_status2 = mommy.make(models.ActionStatus)
        action_type1.allowed_status.add(action_status1)
        action_type1.allowed_status.add(action_status2)
        action_type1.save()

        action = mommy.make(models.Action, type=action_type1, status=action_status1)
        entity = mommy.make(models.Entity)
        action.entities.add(entity)
        action.save()

        menu1 = mommy.make(
            models.ActionMenu, action_type=action_type1,
            icon="cog", label="DO ME", view_name='crm_do_action', a_attrs='class="colorbox-form"', order_index=2
        )
        menu1.only_for_status.add(action_status1)
        menu1.save()

        menu2 = mommy.make(
            models.ActionMenu, action_type=action_type1,
            icon="remove", label="DELETE ME", view_name='crm_delete_action', a_attrs='target="_blank"', order_index=1
        )
        menu2.only_for_status.add(action_status2)
        menu2.save()

        url = reverse('crm_view_entity', args=[entity.id])
        response = self.client.get(url)

        self.assertEqual(response.status_code, 200)

        soup = BeautifulSoup(response.content)

        li_tags = soup.select('.ut-custom-action-menu-item')
        self.assertEqual(len(li_tags), 1)

        self.assertEqual(li_tags[0].text.strip(), menu1.label)
        self.assertEqual(li_tags[0].a['class'], ['colorbox-form'])
        self.assertEqual(li_tags[0].a['href'], reverse('crm_do_action', args=[action.id]))
        self.assertEqual(li_tags[0].a.i['class'], ['fas', 'fa-{0}'.format(menu1.icon)])
Example #22
0
    def test_view_update_emailing(self):
        """check the display of the page"""
        subscription_type1 = mommy.make(models.SubscriptionType)
        subscription_type2 = mommy.make(models.SubscriptionType)

        newsletter1 = mommy.make(Newsletter)
        newsletter2 = mommy.make(Newsletter)

        emailing = mommy.make(Emailing,
                              subscription_type=subscription_type1,
                              newsletter=newsletter1)

        url = reverse("emailing_update_emailing", kwargs={'pk': emailing.id})

        response = self.client.get(url)

        self.assertEqual(200, response.status_code)

        soup = BeautifulSoup(response.content)

        self.assertEqual(
            2, len(soup.select("select#id_subscription_type option")))
        self.assertEqual(
            subscription_type1.id,
            int(soup.select("select#id_subscription_type option")[0]["value"]))
        self.assertEqual(
            "selected",
            soup.select("select#id_subscription_type option")[0]["selected"])
        self.assertEqual(
            subscription_type2.id,
            int(soup.select("select#id_subscription_type option")[1]["value"]))

        self.assertEqual(2, len(soup.select("select#id_newsletter option")))
        self.assertEqual(
            newsletter1.id,
            int(soup.select("select#id_newsletter option")[0]["value"]))
        self.assertEqual(
            "selected",
            soup.select("select#id_newsletter option")[0]["selected"])
        self.assertEqual(
            newsletter2.id,
            int(soup.select("select#id_newsletter option")[1]["value"]))
Example #23
0
    def test_view_clone_action_2_types(self):
        """it should display a select with allowed types"""
        action_type_1 = mommy.make(models.ActionType, order_index=1)
        action_type_2 = mommy.make(models.ActionType, order_index=2)
        action_type_3 = mommy.make(models.ActionType, order_index=3)
        action_type_1.next_action_types.add(action_type_2)
        action_type_1.next_action_types.add(action_type_3)
        action_type_1.save()

        action = mommy.make(models.Action, type=action_type_1)

        response = self.client.get(reverse('crm_clone_action', args=[action.id]))
        self.assertEqual(200, response.status_code)
        soup = BeautifulSoup(response.content)
        html_fields = soup.select("#id_action_type")
        self.assertEqual(1, len(html_fields))
        options = html_fields[0].select("option")
        self.assertEqual(len(options), 2)
        self.assertEqual(options[0]["value"], "{0}".format(action_type_2.id))
        self.assertEqual(options[1]["value"], "{0}".format(action_type_3.id))
Example #24
0
    def test_new_article_title_required(self):
        article_class = get_article_class()

        self._log_as_editor()
        data = {
            'title': "",
            'publication': BaseArticle.DRAFT,
            'template': get_article_templates(None, self.user)[0][0],
            'navigation_parent': None,
            'sites': [settings.SITE_ID]
        }

        response = self.client.post(reverse('coop_cms_new_article'),
                                    data=data,
                                    follow=True)
        self.assertEqual(response.status_code, 200)
        soup = BeautifulSoup(response.content)

        self.assertEqual(article_class.objects.count(), 0)
        self.assertEqual(len(soup.select("ul.errorlist")), 1)
Example #25
0
    def test_update_entity(self):
        """update an entity: check user is set as last_modified_by"""
        user2 = User.objects.create(username="******", is_staff=True)
        user2.set_password("abc")
        user2.save()
        self.client.login(username="******", password="******")

        entity = mommy.make(models.Entity, is_single_contact=False)
        url = reverse('crm_edit_entity', args=[entity.id])
        data = {
            'name': 'Dupond SA',
        }
        response = self.client.post(url, data=data)
        self.assertEqual(200, response.status_code)
        errors = BeautifulSoup(response.content).select('.field-error')
        self.assertEqual(len(errors), 0)

        entity = models.Entity.objects.get(id=entity.id)
        self.assertEqual(entity.name, data['name'])
        self.assertEqual(entity.last_modified_by, user2)
Example #26
0
    def test_view_new_article(self):
        other_site = mommy.make(Site)

        category1 = mommy.make(ArticleCategory)
        category1.sites.clear()
        category1.sites.add(Site.objects.get_current())
        category1.save()

        category2 = mommy.make(ArticleCategory)
        category2.sites.clear()
        category2.sites.add(Site.objects.get_current())
        category2.sites.add(other_site)
        category2.save()

        category3 = mommy.make(ArticleCategory)
        category3.sites.clear()
        category3.sites.add(other_site)
        category3.save()

        category4 = mommy.make(ArticleCategory)
        category4.sites.clear()
        category4.save()

        self._log_as_editor()

        response = self.client.get(reverse('coop_cms_new_article'))
        self.assertEqual(response.status_code, 200)
        soup = BeautifulSoup(response.content)

        categories_select_node = soup.select("select#id_category")[0]

        categories = [
            node.text for node in categories_select_node.select('option')
        ]

        self.assertEqual(3, len(categories))
        self.assertTrue('---------' in categories)
        self.assertTrue(category1.name in categories)
        self.assertTrue(category2.name in categories)
        self.assertTrue(category3.name not in categories)
        self.assertTrue(category4.name not in categories)
Example #27
0
    def test_view_register(self):
        """It should display form"""
        user_count = User.objects.count()
        url = reverse('registration_register')
        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(User.objects.count(), user_count)
        self.assertEqual(len(mail.outbox), 0)

        soup = BeautifulSoup(response.content)
        self.assertEqual(len(soup.select("input#id_email")), 1)
        self.assertEqual(len(soup.select("input#id_password1")), 1)
        self.assertEqual(len(soup.select("input#id_password2")), 1)
        self.assertEqual(len(soup.select("input#id_username")), 1)
        self.assertEqual(len(soup.select("input#id_terms_of_service")), 1)

        self.assertEqual(soup.select("input#id_email")[0]['type'], 'email')
        self.assertEqual(soup.select("input#id_password1")[0]['type'], 'password')
        self.assertEqual(soup.select("input#id_password2")[0]['type'], 'password')
        self.assertEqual(soup.select("input#id_username")[0]['type'], 'hidden')
        self.assertEqual(soup.select("input#id_terms_of_service")[0]['type'], 'checkbox')
Example #28
0
    def test_view_emailing_sent(self):
        """view form no emailing sent"""
        mommy.make(Emailing, status=Emailing.STATUS_EDITING)
        emailing2 = mommy.make(Emailing, status=Emailing.STATUS_SENDING, scheduling_dt=datetime.now())
        emailing3 = mommy.make(
            Emailing, status=Emailing.STATUS_SENT, scheduling_dt=datetime.now(), sending_dt=datetime.now()
        )
        mommy.make(Emailing, status=Emailing.STATUS_SCHEDULED, scheduling_dt=datetime.now())

        url = reverse('search_get_field', args=['emailing_sent'])
        url += "?block=gr0&count=0"

        response = self.client.get(url)
        self.assertEqual(200, response.status_code)
        data = response_as_json(response)
        soup = BeautifulSoup(data['form'])
        selector = soup.select("select#id_gr0-_-emailing_sent-_-0 option")
        self.assertEqual(3, len(selector))
        self.assertEqual("", selector[0]["value"])
        self.assertEqual(emailing3.id, int(selector[1]["value"]))
        self.assertEqual(emailing2.id, int(selector[2]["value"]))
Example #29
0
    def test_view_opportunity_contact_has_left(self):
        """view opportunity with contact who left"""
        entity1 = mommy.make(models.Entity, relationship_date='2012-01-30')
        opp1 = mommy.make(models.Opportunity)

        contact1 = mommy.make(models.Contact, lastname='ABC', entity=entity1)
        contact2 = mommy.make(models.Contact, lastname='DEF', entity=entity1, has_left=True)

        act1 = mommy.make(models.Action, opportunity=opp1)
        act1.contacts.add(contact1)
        act1.contacts.add(contact2)
        act1.save()

        response = self.client.get(reverse('crm_view_opportunity', args=[opp1.id]))
        self.assertEqual(200, response.status_code)
        self.assertContains(response, contact1.lastname)
        self.assertContains(response, contact2.lastname)
        soup = BeautifulSoup(response.content)

        self.assertEqual(len(soup.select("td.ut-contact-{0} .ut-has-left".format(contact1.id))), 0)
        self.assertEqual(len(soup.select("td.ut-contact-{0} .ut-has-left".format(contact2.id))), 1)
Example #30
0
    def test_view_photos_gallery(self):
        """view photos"""
        self._log_as_mediamgr(perm=self._permission("add", Photo))
        gallery = mommy.make(Gallery)

        photo1 = mommy.make(Photo)
        photo1.galleries.add(gallery)
        photo1.save()

        mommy.make(Photo)

        response = self.client.get(reverse('coop_cms_media_photologue'))
        self.assertEqual(response.status_code, 200)

        soup = BeautifulSoup(response.content)
        nodes = soup.select(".library-thumbnail")
        self.assertEqual(2, len(nodes))

        nodes = soup.select(".media-filters a")
        #All + gallery
        self.assertEqual(2, len(nodes))