Skip to content
Snippets Groups Projects
Select Git revision
  • move-gl-dropdown
  • improve-table-pagination-spec
  • move-markdown-preview
  • winh-fix-merge-request-spec
  • master default
  • index-namespaces-lower-name
  • winh-single-karma-test
  • 10-3-stable
  • 36782-replace-team-user-role-with-add_role-user-in-specs
  • winh-modal-internal-state
  • tz-ide-file-icons
  • 38869-milestone-select
  • update-autodevops-template
  • jivl-activate-repo-cookie-preferences
  • qa-add-deploy-key
  • docs-move-article-ldap
  • 40780-choose-file
  • 22643-manual-job-page
  • refactor-cluster-show-page-conservative
  • dm-sidekiq-versioning
  • v10.4.0.pre
  • v10.3.0
  • v10.3.0-rc5
  • v10.3.0-rc4
  • v10.3.0-rc3
  • v10.3.0-rc2
  • v10.2.5
  • v10.3.0-rc1
  • v10.0.7
  • v10.1.5
  • v10.2.4
  • v10.2.3
  • v10.2.2
  • v10.2.1
  • v10.3.0.pre
  • v10.2.0
  • v10.2.0-rc4
  • v10.2.0-rc3
  • v10.1.4
  • v10.2.0-rc2
40 results

pages_domains_controller_spec.rb

Blame
  • Forked from GitLab.org / GitLab FOSS
    7844 commits behind the upstream repository.
    • Timothy Andrew's avatar
      86f4767d
      Fix 500 error while navigating to the `pages_domains` 'show' page. · 86f4767d
      Timothy Andrew authored
      ==================
      = Implementation =
      ==================
      
      1. The path of the page is of the form 'group/project/pages/domains/<domain_name>'
      2. Rails looks at `params[:id]` (which should be the domain name), and finds the
         relevant model record.
      3. Given a domain like `foo.bar`, Rails sets `params[:id]` to `foo` (should be
         `foo.bar`), and sets `params[:format]` to `bar`
      4. This commit fixes the issue by adding a route constraint, so that
         `params[:id]` is set to the entire `foo.bar` domain name.
      
      =========
      = Tests =
      =========
      
      1. Add controller specs for the `PagesDomainController`. These are
         slightly orthogonal to this bug fix (they don't fail when this bug is
         present), but should be present nonetheless.
      2. Add routing specs that catch this bug (by asserting that the `id`
         param is passed as expected when it contains a domain name).
      3. Modify the 'RESTful project resources' routing spec shared example to
         accomodate controllers where the controller path (such as
         `pages/domains`) is different from the controller name (such as
         `pages_domains`).
      86f4767d
      History
      Fix 500 error while navigating to the `pages_domains` 'show' page.
      Timothy Andrew authored
      ==================
      = Implementation =
      ==================
      
      1. The path of the page is of the form 'group/project/pages/domains/<domain_name>'
      2. Rails looks at `params[:id]` (which should be the domain name), and finds the
         relevant model record.
      3. Given a domain like `foo.bar`, Rails sets `params[:id]` to `foo` (should be
         `foo.bar`), and sets `params[:format]` to `bar`
      4. This commit fixes the issue by adding a route constraint, so that
         `params[:id]` is set to the entire `foo.bar` domain name.
      
      =========
      = Tests =
      =========
      
      1. Add controller specs for the `PagesDomainController`. These are
         slightly orthogonal to this bug fix (they don't fail when this bug is
         present), but should be present nonetheless.
      2. Add routing specs that catch this bug (by asserting that the `id`
         param is passed as expected when it contains a domain name).
      3. Modify the 'RESTful project resources' routing spec shared example to
         accomodate controllers where the controller path (such as
         `pages/domains`) is different from the controller name (such as
         `pages_domains`).
    pages_domains_controller_spec.rb 1.65 KiB
    require 'spec_helper'
    
    describe Projects::PagesDomainsController do
      let(:user)    { create(:user) }
      let(:project) { create(:project) }
    
      let(:request_params) do
        {
          namespace_id: project.namespace,
          project_id: project
        }
      end
    
      before do
        sign_in(user)
        project.team << [user, :master]
      end
    
      describe 'GET show' do
        let!(:pages_domain)   { create(:pages_domain, project: project) }
    
        it "displays the 'show' page" do
          get(:show, request_params.merge(id: pages_domain.domain))
    
          expect(response).to have_http_status(200)
          expect(response).to render_template('show')
        end
      end
    
      describe 'GET new' do
        it "displays the 'new' page" do
          get(:new, request_params)
    
          expect(response).to have_http_status(200)
          expect(response).to render_template('new')
        end
      end
    
      describe 'POST create' do
        let(:pages_domain_params) do
          build(:pages_domain, :with_certificate, :with_key).slice(:key, :certificate, :domain)
        end
    
        it "creates a new pages domain" do
          expect do
            post(:create, request_params.merge(pages_domain: pages_domain_params))
          end.to change { PagesDomain.count }.by(1)
    
          expect(response).to redirect_to(namespace_project_pages_path(project.namespace, project))
        end
      end
    
      describe 'DELETE destroy' do
        let!(:pages_domain)   { create(:pages_domain, project: project) }
    
        it "deletes the pages domain" do
          expect do
            delete(:destroy, request_params.merge(id: pages_domain.domain))
          end.to change { PagesDomain.count }.by(-1)
    
          expect(response).to redirect_to(namespace_project_pages_path(project.namespace, project))
        end
      end
    end