File: singleton_test.rb

package info (click to toggle)
ruby-inherited-resources 1.13.0-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 824 kB
  • sloc: ruby: 4,388; makefile: 6
file content (94 lines) | stat: -rw-r--r-- 2,862 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
require 'test_helper'

# This test file is instead to test the how controller flow and actions
# using a belongs_to association. This is done using mocks a la rspec.
#
class Store
  extend ActiveModel::Naming
end

class Manager
  extend ActiveModel::Naming
end

class ManagersController < InheritedResources::Base
  defaults singleton: true
  belongs_to :store
end

class SingletonTest < ActionController::TestCase
  tests ManagersController

  def setup
    draw_routes do
      resources :store do
        resource :manager
      end
    end
  end

  def teardown
    clear_routes
  end

  def test_expose_the_requested_manager_on_show
    Store.expects(:find).with('37').returns(mock_store)
    mock_store.expects(:manager).returns(mock_manager)
    get :show, params: { store_id: '37' }
    assert_equal mock_store, assigns(:store)
    assert_equal mock_manager, assigns(:manager)
  end

  def test_expose_a_new_manager_on_new
    Store.expects(:find).with('37').returns(mock_store)
    mock_store.expects(:build_manager).returns(mock_manager)
    get :new, params: { store_id: '37' }
    assert_equal mock_store, assigns(:store)
    assert_equal mock_manager, assigns(:manager)
  end

  def test_expose_the_requested_manager_on_edit
    Store.expects(:find).with('37').returns(mock_store)
    mock_store.expects(:manager).returns(mock_manager)
    get :edit, params: { store_id: '37' }
    assert_equal mock_store, assigns(:store)
    assert_equal mock_manager, assigns(:manager)
    assert_response :success
  end

  def test_expose_a_newly_create_manager_on_create
    Store.expects(:find).with('37').returns(mock_store)
    mock_store.expects(:build_manager).with({'these' => 'params'}).returns(mock_manager(save: true))
    post :create, params: { store_id: '37', manager: {these: 'params'} }
    assert_equal mock_store, assigns(:store)
    assert_equal mock_manager, assigns(:manager)
  end

  def test_update_the_requested_object_on_update
    Store.expects(:find).with('37').returns(mock_store(manager: mock_manager))
    mock_manager.expects(:update).with({'these' => 'params'}).returns(true)
    put :update, params: { store_id: '37', manager: {these: 'params'} }
    assert_equal mock_store, assigns(:store)
    assert_equal mock_manager, assigns(:manager)
  end

  def test_the_requested_manager_is_destroyed_on_destroy
    Store.expects(:find).with('37').returns(mock_store)
    mock_store.expects(:manager).returns(mock_manager)
    @controller.expects(:parent_url).returns('http://test.host/')
    mock_manager.expects(:destroy)
    delete :destroy, params: { store_id: '37' }
    assert_equal mock_store, assigns(:store)
    assert_equal mock_manager, assigns(:manager)
  end

  protected

    def mock_store(stubs={})
      @mock_store ||= mock(stubs)
    end

    def mock_manager(stubs={})
      @mock_manager ||= mock(stubs)
    end
end