Exemple #1
0
    def setUp(self):
        super(TestThePageMoveApi, self).setUp()
        self.first_parent = factories.FancyPageFactory(
            node__name="First parent")
        self.second_parent = factories.FancyPageFactory(
            node__name="Second parent")
        self.third_parent = factories.FancyPageFactory(
            node__name="Third parent")

        self.a_child = self.first_parent.add_child(node__name='One child')
        self.first_parent.add_child(node__name='Another child')
        self.first_parent.add_child(node__name='Third child')
Exemple #2
0
    def setUp(self):
        super(TestTheBlockApi, self).setUp()
        self.prepare_template_file(
            "{% load fp_container_tags%}"
            "{% fp_object_container page-container %}"
        )

        self.page = factories.FancyPageFactory(
            node__name="A new page", node__slug='a-new-page')

        self.text_block = TextBlock.objects.create(
            container=self.page.get_container_from_name('page-container'),
            text="some text",
        )

        self.other_text_block = TextBlock.objects.create(
            container=self.page.get_container_from_name('page-container'),
            text="some text",
        )

        self.third_text_block = TextBlock.objects.create(
            container=self.page.get_container_from_name('page-container'),
            text="second text",
        )
        self.assertEquals(self.text_block.display_order, 0)
        self.assertEquals(self.other_text_block.display_order, 1)
        self.assertEquals(self.third_text_block.display_order, 2)
    def test_can_be_added_in_the_dashboard(self):
        fancy_page = factories.FancyPageFactory(node__name='Sample Page')
        self.assertEquals(fancy_page.image, None)

        im = Image.new("RGB", (320, 240), "red")
        __, filename = tempfile.mkstemp(suffix='.jpg', dir=TEMP_IMAGE_DIR)
        im.save(filename, "JPEG")

        page = self.get(
            reverse('fp-dashboard:page-update', args=(fancy_page.id,)))

        settings_form = page.form
        settings_form['image'] = Upload(filename)
        list_page = settings_form.submit()

        self.assertRedirects(list_page, reverse('fp-dashboard:page-list'))

        # This bit is required because when using Oscar, the upload directory
        # is defined by the category's image field and differs from the one on
        # the PageNode.
        upload_url = None
        for field in get_node_model()._meta.fields:
            if field.name == 'image':
                upload_url = field.upload_to
                break

        pages_path = os.path.join(settings.MEDIA_ROOT, upload_url)
        fancy_page = FancyPage.objects.get(id=fancy_page.id)
        self.assertEquals(
            fancy_page.image.path,
            os.path.join(pages_path, filename.rsplit('/')[-1]))
    def test_update_a_toplevel_page(self):
        page_name = "Test page"
        page_description = "The old description"

        now = timezone.now()
        current_tz = timezone.get_current_timezone()

        fancy_page = factories.FancyPageFactory(
            date_visible_start=now, node__name=page_name,
            node__description=page_description)

        page = self.get(
            reverse('fp-dashboard:page-update', args=(fancy_page.id,)))

        self.assertContains(page, 'Update page')
        self.assertContains(page, fancy_page.name)

        form = page.form
        self.assertEquals(form['name'].value, page_name)
        self.assertEquals(form['description'].value.strip(), page_description)
        self.assertEquals(
            form['date_visible_start'].value,
            date(now.astimezone(current_tz), 'Y-m-d H:i:s'))

        form['name'] = 'Another name'
        form['description'] = "Some description"
        form['date_visible_start'] = '2012-12-30'
        page = form.submit()

        fancy_page = FancyPage.objects.get(id=fancy_page.id)
        self.assertEquals(fancy_page.name, 'Another name')
        self.assertEquals(fancy_page.description, 'Some description')
Exemple #5
0
def test_text_block_can_be_added_to_a_container(admin_user, browser,
                                                live_server):
    fancypage = factories.FancyPageFactory()

    title = "Sample Title"
    text = "This is an amazing piece of text"
    factories.TitleTextBlockFactory(container=fancypage.containers.all()[0],
                                    title=title,
                                    text=text)

    browser.visit(live_server.url + fancypage.get_absolute_url())

    browser.is_text_present(title)
    browser.is_text_present(text)

    open_editor_panel(browser)

    find_and_click_by_css(browser, '.edit-button')
    wait_for_editor_reload()

    title_update = " Is Now New"
    browser.find_by_css('input[name=title]').type(title_update)
    browser.is_text_present(title + title_update)
    browser.is_text_present(text)

    text_update = " that I am editing on the fly."
    rte = browser.find_by_css('.trumbowyg-editor')
    rte.type(text_update)

    browser.is_text_present(text + text_update)
    browser.is_text_present(title + title_update)
def test_can_move_block_from_one_container_to_another(live_server, browser,
                                                      admin_user):
    page = factories.FancyPageFactory(node__name='Home')
    main_container = page.containers.all()[0]

    layout = factories.TwoColumnLayoutBlockFactory(container=main_container)
    browser.visit(live_server.url + page.get_absolute_url())

    right = layout.containers.get(name='right-container')
    left = layout.containers.get(name='left-container')

    moving_block = factories.TextBlockFactory(container=right)
    factories.TextBlockFactory(container=right)
    factories.TextBlockFactory(container=left)

    browser.visit(live_server.url + page.get_absolute_url())
    browser.find_by_css('#editor-handle').first.click()

    source = browser.find_by_css('#block-{} div.move'.format(
        moving_block.uuid)).first

    chain = ActionChains(browser.driver)
    chain.drag_and_drop_by_offset(source._element, -600, 200).perform()

    time.sleep(5)

    assert right.blocks.count() == left.blocks.count() == 1
    assert main_container.blocks.count() == 2

    main_block_ids = [b.uuid for b in main_container.blocks.all()]
    assert main_block_ids == [layout.uuid, moving_block.uuid]
    def test_can_delete_a_page(self):
        factories.FancyPageFactory(node__name="A new page")
        self.assertEquals(FancyPage.objects.count(), 1)
        page = self.get(reverse("fp-dashboard:page-list"))
        page = page.click("Delete")

        page.forms['page-delete-form'].submit()
        self.assertEquals(FancyPage.objects.count(), 0)
Exemple #8
0
    def test_returns_child_pagtest_returns_child_page_querysete_queryset(self):
        parent = factories.FancyPageFactory()

        children = [
            parent.add_child(node__name='first child'),
            parent.add_child(node__name='second child')]

        with self.assertNumQueries(1):
            pages = parent.get_children()
            self.assertItemsEqual(pages, children)
    def test_can_cancel_the_delete_of_a_page(self):
        fpage = factories.FancyPageFactory(node__name="A new page")

        self.assertEquals(FancyPage.objects.count(), 1)

        page = self.get(fpage.get_delete_page_url())
        page = page.click('cancel')
        self.assertEquals(FancyPage.objects.count(), 1)
        self.assertContains(page, "Add New Page")
        self.assertContains(page, "Page Management")
    def test_can_cancel_the_delete_of_a_page(self):
        factories.FancyPageFactory(node__name="A new page")

        self.assertEquals(FancyPage.objects.count(), 1)

        page = self.get(reverse("fp-dashboard:page-list"))
        page = page.click("Delete")
        page = page.click('cancel')
        self.assertEquals(FancyPage.objects.count(), 1)
        self.assertContains(page, "Create new top-level page")
        self.assertContains(page, "Page Management")
    def test_can_delete_a_child_page(self):
        parent_page = factories.FancyPageFactory(node__name="A new page")
        factories.FancyPageFactory(node__name="Another page")

        child_page = parent_page.add_child(node__name="The child")

        parent = FancyPage.objects.get(id=parent_page.id)
        self.assertEquals(parent.node.numchild, 1)

        self.assertEquals(FancyPage.objects.count(), 3)
        page = self.get(child_page.get_delete_page_url())
        delete_page = page.forms['page-delete-form'].submit()
        self.assertRedirects(delete_page, reverse('fp-dashboard:page-list'))
        self.assertEquals(FancyPage.objects.count(), 2)

        p = FancyPage.objects.get(id=parent_page.id)
        self.assertSequenceEqual(p.node.get_children(), [])

        factories.FancyPageFactory(node__name="3rd page")
        self.assertEquals(FancyPage.objects.count(), 3)
Exemple #12
0
    def setUp(self):
        super(TestImageBlock, self).setUp()
        self.page = factories.FancyPageFactory()

        im = Image.new("RGB", (320, 240), "red")
        __, filename = tempfile.mkstemp(suffix='.jpg', dir=TEMP_MEDIA_ROOT)
        im.save(filename, "JPEG")

        self.image_filename = os.path.basename(filename)
        self.image = ImageAsset.objects.create(name='test image',
                                               image=self.image_filename,
                                               creator=self.user)
    def test_displays_an_error_when_slug_already_exists(self):
        page_title = "Home"
        home_page = factories.FancyPageFactory(node__name=page_title)
        self.assertEquals(home_page.slug, 'home')

        page = self.get(reverse('fp-dashboard:page-list'))

        page = page.click('Add New Page', index=0)
        new_page_form = page.form
        new_page_form['name'] = page_title
        page = new_page_form.submit()

        self.assertContains(page, 'A page with this title already exists')
    def test_can_create_child_page(self):
        child_page_name = 'Test Page'
        parent_page = factories.FancyPageFactory(node__name="A new page")

        create_form = self.get(parent_page.get_add_child_url()).form
        create_form['name'] = child_page_name
        list_page = create_form.submit()

        self.assertRedirects(list_page, reverse('fp-dashboard:page-list'))

        child_node = FancyPage.objects.get(node__name=child_page_name).node
        self.assertTrue(child_node.path.startswith(parent_page.node.path))
        self.assertTrue(child_node.depth, 2)
Exemple #15
0
    def _create_grouped_pages(self):
        self.primary_nav_group = factories.PageGroupFactory(name="Primary Nav")
        self.footer_group = factories.PageGroupFactory(name="Footer")

        page_defaults = {'status': FancyPage.PUBLISHED}
        self.ungrouped_page = factories.FancyPageFactory(
            node__name='Ungrouped Page', **page_defaults)

        self.first_primnav_page = factories.FancyPageFactory(
            node__name="First primary navigation page", **page_defaults)
        self.first_primnav_page.groups.add(self.primary_nav_group)

        self.second_primnav_page = factories.FancyPageFactory(
            node__name="Second primary navigation page", **page_defaults)
        self.second_primnav_page.groups.add(self.primary_nav_group)

        self.footer_page = factories.FancyPageFactory(node__name="Footer page",
                                                      **page_defaults)
        self.footer_page.groups.add(self.footer_group)

        self.both_groups_page = factories.FancyPageFactory(
            node__name="Both groups page", **page_defaults)
        self.both_groups_page.groups.add(self.primary_nav_group)
        self.both_groups_page.groups.add(self.footer_group)
Exemple #16
0
def test_text_block_can_be_added_to_container(admin_user, browser,
                                              live_server):
    fancypage = factories.FancyPageFactory()

    browser.visit(live_server.url + fancypage.get_absolute_url())

    find_and_click_by_css(browser, '#editor-handle')
    find_and_click_by_css(browser, "div[class=block-add-control]>a")
    wait_for_editor_reload()

    find_and_click_by_css(browser, "a[href='#content']")

    find_and_click_by_css(browser, "button[data-block-code=text]")
    wait_for_editor_reload()

    default_text = 'Your text goes here'
    if not browser.is_text_present(default_text, 2):
        raise AssertionError("Could not find text block on page")

    if not browser.is_element_present_by_css('.edit-button', 2):
        raise AssertionError("Could not find edit button for block")

    find_and_click_by_css(browser, '.edit-button')
    wait_for_editor_reload()

    text_sel = 'textarea[name=text]'
    if not browser.is_element_present_by_css(text_sel, 2):
        raise AssertionError("Could not find input area for 'text' field")

    new_text = "The new text for this block"
    rte = browser.find_by_css('.trumbowyg-editor')
    # Jump to the end of the line and remove it using the backspace key
    rte.type(Keys.ARROW_RIGHT * (len(default_text) + 1))
    rte.type(Keys.BACKSPACE * (len(default_text) + 1))
    # Now add the new text
    rte.type(new_text)

    find_and_click_by_css(browser, 'button[type=submit]')
    wait_for_editor_reload()

    if not browser.is_text_present(new_text, 2):
        raise AssertionError("Could not find updated text")

    assert TextBlock.objects.count() == 1
    # check for the text with an appended <br> because typing text into
    # the input box via Selenium causes a linebreak at the end.
    assert TextBlock.objects.all()[0].text == new_text + '<br>'
Exemple #17
0
def test_form_block_can_submit_form(webtest, form_block_class):
    fancypage = factories.FancyPageFactory()
    form_block = form_block_class.objects.create(
        form_selection='contact-us', container=fancypage.containers.all()[0])

    assert isinstance(form_block.form,
                      import_string('contact_us.forms.ContactUsForm'))

    page = webtest.get(fancypage.get_absolute_url())
    assert form_block.url in page

    page.form['name'] = 'Test User'
    page.form['email'] = '*****@*****.**'
    page.form['message'] = 'Test message'
    page.form['next'] = fancypage.get_absolute_url()
    submit_page = page.form.submit().follow()

    assert submit_page.request.path == fancypage.get_absolute_url()
Exemple #18
0
def test_text_block_can_be_deleted_from_a_container(admin_user, browser,
                                                    live_server):
    fancypage = factories.FancyPageFactory()
    title = "Sample Title"
    text = "This is an amazing piece of text"
    factories.TitleTextBlockFactory(container=fancypage.containers.all()[0],
                                    title=title,
                                    text=text)

    browser.visit(live_server.url + fancypage.get_absolute_url())

    browser.is_text_present(title)
    browser.is_text_present(text)

    open_editor_panel(browser)

    find_and_click_by_css(browser, 'div.delete')
    wait_for_editor_reload()

    assert factories.TitleTextBlockFactory._meta.model.objects.count() == 0
Exemple #19
0
    def setUp(self):
        super(TestTheBlockMoveApi, self).setUp()
        self.prepare_template_file(
            "{% load fp_container_tags%}"
            "{% fp_object_container main-container %}"
            "{% fp_object_container left-container %}"
        )

        page_type = PageType.objects.create(
            name="Example Template",
            template_name=self.template_name,
        )
        self.page = factories.FancyPageFactory(
            node__name="A new page", node__slug='a-new-page',
            page_type=page_type)
        self.left_container = self.page.get_container_from_name(
            'left-container')
        self.main_container = self.page.get_container_from_name(
            'main-container')

        self.left_blocks = []
        self.main_blocks = []

        for idx in range(0, 3):
            main_block = TextBlock.objects.create(
                container=self.main_container,
                text="Main Column / Block #%d" % idx,
            )
            self.main_blocks.append(main_block)
            self.assertEquals(main_block.display_order, idx)

            left_block = TextBlock.objects.create(
                container=self.left_container,
                text="Left Column / Block #{}".format(idx))
            self.left_blocks.append(left_block)
            self.assertEquals(left_block.display_order, idx)
Exemple #20
0
def tree(db):
    """
    Fixture providing a tree of fancypages::

        + root
          + sibling1
            + child1
          + sibling2
            + child1
            + child2
    """
    root = factories.FancyPageFactory(node__name='root')
    sibling1 = factories.FancyPageFactory(node__name="node-1",
                                          node__parent=root)
    sibling2 = factories.FancyPageFactory(node__name="node-2",
                                          node__parent=root)
    factories.FancyPageFactory(node__name="node-1-1", node__parent=sibling1)
    factories.FancyPageFactory(node__name="node-2-1", node__parent=sibling2)
    factories.FancyPageFactory(node__name="node-2-2", node__parent=sibling2)
    return root
Exemple #21
0
def test_child_page_returns_toplevel_parent(db):
    root = factories.FancyPageFactory()
    child = factories.FancyPageFactory(node__parent=root)

    assert child.toplevel_parent == root
Exemple #22
0
def test_can_be_added_with_new_image_and_link(admin_user, live_server,
                                              browser):
    fancypage = factories.FancyPageFactory()

    im = Image.new("RGB", (320, 240), "red")
    __, filename = tempfile.mkstemp(suffix='.jpg', dir=TEMP_MEDIA_ROOT)
    im.save(filename, "JPEG")

    image_filename = os.path.basename(filename)
    ImageAsset.objects.create(name='test image',
                              image=image_filename,
                              creator=admin_user)

    second_page = factories.FancyPageFactory(node__name='Another page',
                                             node__slug='another-page')

    browser.visit(live_server.url + fancypage.get_absolute_url())

    find_and_click_by_css(browser, '#editor-handle')
    find_and_click_by_css(browser, "div[class=block-add-control]>a")
    find_and_click_by_css(browser, "a[href='#content']")

    find_and_click_by_css(browser, "button[data-block-code=image]")
    wait_for_editor_reload()

    default_image_text = 'Add An Image'
    if not browser.is_text_present(default_image_text, 2):
        raise AssertionError("Could not find image block on page")

    if not browser.is_element_present_by_css('.edit-button', 2):
        raise AssertionError("Could not find edit button for block")

    find_and_click_by_css(browser, '.edit-button')
    wait_for_editor_reload()

    find_and_click_by_css(browser, 'a[data-behaviours=load-asset-modal]')
    wait_for_editor_reload()

    with browser.get_iframe(0) as iframe:
        wait_for_editor_reload()
        find_and_click_by_css(iframe, 'li[data-behaviours=selectable-asset]')

    wait_for_editor_reload()

    # select 'Another page' as the link for the image
    find_and_click_by_css(browser, '.glyphicon-share')
    find_and_click_by_css(browser, 'a[href*={}]'.format(second_page.slug))

    find_and_click_by_css(browser, 'button[type=submit]')
    wait_for_editor_reload()

    shows_image = browser.is_element_present_by_css(
        "img[src$='{}']".format(image_filename))
    if not shows_image:
        raise AssertionError('Image not added to image block')

    link_exists = browser.is_element_present_by_css(
        "div.block-wrapper>a[href*={}]".format(second_page.slug))

    if not link_exists:
        raise AssertionError(
            'image block is not wrapped in link to other page')
Exemple #23
0
def test_root_page_returns_toplevel_parent(db):
    root = factories.FancyPageFactory()
    assert root.toplevel_parent == root
Exemple #24
0
 def setUp(self):
     super(TestATextBlock, self).setUp()
     self.page = factories.FancyPageFactory()
 def test_can_delete_a_page(self):
     fpage = factories.FancyPageFactory(node__name="A new page")
     self.assertEquals(FancyPage.objects.count(), 1)
     page = self.get(fpage.get_delete_page_url())
     page.forms['page-delete-form'].submit()
     self.assertEquals(FancyPage.objects.count(), 0)