podemos-info/participa2

View on GitHub
decidim-module-gravity_forms/spec/system/decidim/gravity_forms/admin/admin_manages_gravity_forms_spec.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true

require "spec_helper"

describe "Admin manages gravity forms", type: :system do
  let(:manifest_name) { "gravity_forms" }

  let!(:gravity_form) { create :gravity_form, component: current_component }

  include_context "when managing a component as an admin"

  describe "creating a gravity form" do
    before do
      visit_component_admin

      within ".card-title" do
        click_link "New"
      end
    end

    it "shows all fields" do
      expect(page).to have_field("gravity_form_title_en")
      expect(page).to have_field("gravity_form_description_en")
      expect(page).to have_field("gravity_form_form_number")
      expect(page).to have_field("gravity_form_slug")
      expect(page).to have_field("gravity_form_require_login")
      expect(page).to have_field("gravity_form_hidden")
    end

    it "shows a success message and displays the new form on the index page" do
      within ".new_gravity_form" do
        fill_in_i18n(
          :gravity_form_title,
          "#gravity_form-title-tabs",
          en: "My gravity form",
          es: "Mi gravity form",
          ca: "Meu gravity form"
        )

        fill_in "Form number", with: "1"
        fill_in "Slug", with: "waka-waka"

        find("*[type=submit]").click
      end

      within ".callout-wrapper" do
        expect(page).to have_content("successfully")
      end

      within "table" do
        expect(page).to have_content("My gravity form")
      end
    end
  end

  describe "updating a gravity form" do
    let!(:gravity_form) do
      create(:gravity_form, component: current_component)
    end

    before do
      visit_component_admin

      within find("tr", text: translated(gravity_form.title)) do
        page.find(".action-icon--edit").click
      end
    end

    it "shows a success message and shows the new info back in the index page" do
      within ".edit_gravity_form" do
        fill_in_i18n(
          :gravity_form_title,
          "#gravity_form-title-tabs",
          en: "My new title",
          es: "Mi nuevo título",
          ca: "El meu nou títol"
        )

        find("*[type=submit]").click
      end

      within ".callout-wrapper" do
        expect(page).to have_content("successfully")
      end

      within "table" do
        expect(page).to have_content("My new title")
      end
    end
  end

  describe "destroying a gravity form" do
    let!(:gravity_form) do
      create(:gravity_form, component: current_component)
    end

    before do
      visit_component_admin

      within find("tr", text: translated(gravity_form.title)) do
        accept_confirm { page.find(".action-icon--remove").click }
      end
    end

    it "shows a success message and the form is not longer listed" do
      within ".callout-wrapper" do
        expect(page).to have_content("successfully")
      end

      within "table" do
        expect(page).not_to have_content(gravity_form.slug)
      end
    end
  end

  describe "previewing gravity forms" do
    shared_examples_for "a gravity form preview" do
      it "allows the user to preview the gravity form" do
        within find("tr", text: translated(gravity_form.title)) do
          klass = "action-icon--preview"
          href = resource_locator(gravity_form).path
          target = "blank"

          expect(page).to have_selector(
            :xpath,
            "//a[contains(@class,'#{klass}')][@href='#{href}'][@target='#{target}']"
          )
        end
      end
    end

    context "when visible" do
      before do
        gravity_form.update!(hidden: false)
      end

      it_behaves_like "a gravity form preview"
    end

    context "when hidden" do
      before do
        gravity_form.update!(hidden: true)
      end

      it_behaves_like "a gravity form preview"
    end
  end
end