Тестирование контроллеров Rails, унаследованных от Typus - PullRequest
0 голосов
/ 19 мая 2011

Я боролся с этим в течение нескольких дней, и, похоже, в Интернете нет особой помощи.Я посмотрел на вики-сайт Typus, пример приложения и тесты и, похоже, все делает правильно, но все равно получаю код состояния HTTP 302 (перенаправление), где ожидаю 200 (успех) в моих тестах.

Ниже приведены соответствующие файлы (без удаления ненужных материалов)

config / initializers / typus.rb (rails g typus: миграция была выполнена, так как у меня есть таблица admin_users):

Typus.setup do |config|

  # Application name.
  config.admin_title = "Something"
  # config.admin_sub_title = ""

  # When mailer_sender is set, password recover is enabled. This email
  # address will be used in Admin::Mailer.
  config.mailer_sender = "noreply@somewhere.com"

  # Define paperclip attachment styles.
  # config.file_preview = :medium
  # config.file_thumbnail = :thumb

  # Authentication: +:none+, +:http_basic+
  # Run `rails g typus:migration` if you need an advanced authentication system.
  config.authentication = :session

  # Define user_class_name.
  config.user_class_name = "AdminUser"

  # Define user_fk.
  config.user_fk = "admin_user_id"

  # Define master_role.
  config.master_role = "admin"
end

config / typus / admin_user.yml

AdminUser:
  fields:
    default: first_name, last_name, role, email, locale
    list: email, role, status
    form: first_name, last_name, role, email, password, password_confirmation, locale
    options:
      selectors: role, locale
      booleans:
        status: Active, Inactive
  filters: status, role
  search: first_name, last_name, email
  application: Admin
  description: Users Administration

test / factory / admin_users.rb:

Factory.define :admin_user do |u|
  u.first_name 'Admin'
  u.last_name 'User'
  u.email 'admin@somewhere.com'
  u.role 'admin'
  u.password 'password!'
  u.token '1A2B3C4D5E6F'
  u.status true
  u.locale 'en'
end

test / функциональный / admin / credits_controller_test.rb:

require 'test_helper'

class Admin::CreditsControllerTest < ActionController::TestCase
  setup do
    @admin_user = Factory(:admin_user)
    @request.session[:admin_user_id] = @admin_user.id
    @request.env['HTTP_REFERER'] = '/admin/credits/new'
  end

  context "new" do
    should "be successful" do
      get :new
      assert_response :success
    end
  end
end

@response.body:

<html>
  <body>You are being <a href="http://test.host/admin/session/new?back_to=%2Fadmin%2Fcredits%2Fnew">redirected</a>.
  </body>
</html>

Как видите, я установил тип для использования admin_user и admin_user_id для ключа сеанса.Но по какой-то причине этот тест не дает 302, а не 200. Я уверен, что это потому, что я делаю что-то неправильно, что я просто не вижу.Я также создал все эти гист , на случай, если кто-то предпочтет это.

Отредактировано 2011-05-19 09:58 по центральному времени: добавлен основной текст ответа для запроса.

1 Ответ

0 голосов
/ 25 мая 2011

Я понял это. Это была проблема с файлом config / typus / admin_roles.yml.

До:

admin:
  Category: create, read, update
  Credit: read
  ...

После:

admin:
  Category: create, read, update
  Credit: read, create
  ...

Проблема заключалась в том, что пользователи с правами администратора не имели доступа к действию CREATE на admin / credits_controller, в результате чего пользователь был отправлен обратно на адрес администратора.

Предоставление администраторам доступа к действию и изменение

@session[:admin_user_id]

до

@session[:typus_user_id] #Just like in the Typus docs

решил проблему. Я изменил его на: admin_user_id из-за

config.user_fk = "admin_user_id"

в конфигурационных файлах typus, при попытке решить эту проблему.

...