File: widgets_controller_spec.rb

package info (click to toggle)
ruby-paper-trail 12.0.0-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 1,200 kB
  • sloc: ruby: 6,743; makefile: 6
file content (88 lines) | stat: -rw-r--r-- 3,446 bytes parent folder | download | duplicates (2)
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
# frozen_string_literal: true

require "spec_helper"

RSpec.describe WidgetsController, type: :controller, versioning: true do
  before { request.env["REMOTE_ADDR"] = "127.0.0.1" }

  after { RequestStore.store[:paper_trail] = nil }

  describe "#create" do
    context "PT enabled" do
      it "stores information like IP address in version" do
        post(:create, params: { widget: { name: "Flugel" } })
        widget = assigns(:widget)
        expect(widget.versions.length).to(eq(1))
        expect(widget.versions.last.whodunnit.to_i).to(eq(153))
        expect(widget.versions.last.ip).to(eq("127.0.0.1"))
        expect(widget.versions.last.user_agent).to(eq("Rails Testing"))
      end

      it "controller metadata methods should get evaluated" do
        request.env["HTTP_USER_AGENT"] = "User-Agent"
        post :create, params: { widget: { name: "Flugel" } }
        expect(PaperTrail.request.enabled?).to eq(true)
        expect(PaperTrail.request.whodunnit).to(eq(153))
        expect(PaperTrail.request.controller_info.present?).to(eq(true))
        expect(PaperTrail.request.controller_info.key?(:ip)).to(eq(true))
        expect(PaperTrail.request.controller_info.key?(:user_agent)).to(eq(true))
      end
    end

    context "PT disabled" do
      it "does not save a version, and metadata is not set" do
        request.env["HTTP_USER_AGENT"] = "Disable User-Agent"
        post :create, params: { widget: { name: "Flugel" } }
        expect(assigns(:widget).versions.length).to(eq(0))
        expect(PaperTrail.request.enabled?).to eq(false)
        expect(PaperTrail.request.whodunnit).to be_nil
        expect(PaperTrail.request.controller_info).to eq({})
      end
    end
  end

  describe "#destroy" do
    it "can be disabled" do
      request.env["HTTP_USER_AGENT"] = "Disable User-Agent"
      post(:create, params: { widget: { name: "Flugel" } })
      w = assigns(:widget)
      expect(w.versions.length).to(eq(0))
      delete(:destroy, params: { id: w.id })
      expect(PaperTrail::Version.with_item_keys("Widget", w.id).size).to(eq(0))
    end

    it "stores information like IP address in version" do
      w = Widget.create(name: "Roundel")
      expect(w.versions.length).to(eq(1))
      delete(:destroy, params: { id: w.id })
      widget = assigns(:widget)
      expect(widget.versions.length).to(eq(2))
      expect(widget.versions.last.ip).to(eq("127.0.0.1"))
      expect(widget.versions.last.user_agent).to(eq("Rails Testing"))
      expect(widget.versions.last.whodunnit.to_i).to(eq(153))
    end
  end

  describe "#update" do
    it "stores information like IP address in version" do
      w = Widget.create(name: "Duvel")
      expect(w.versions.length).to(eq(1))
      put(:update, params: { id: w.id, widget: { name: "Bugle" } })
      widget = assigns(:widget)
      expect(widget.versions.length).to(eq(2))
      expect(widget.versions.last.whodunnit.to_i).to(eq(153))
      expect(widget.versions.last.ip).to(eq("127.0.0.1"))
      expect(widget.versions.last.user_agent).to(eq("Rails Testing"))
    end

    it "can be disabled" do
      request.env["HTTP_USER_AGENT"] = "Disable User-Agent"
      post(:create, params: { widget: { name: "Flugel" } })
      w = assigns(:widget)
      expect(w.versions.length).to(eq(0))
      put(:update, params: { id: w.id, widget: { name: "Bugle" } })
      widget = assigns(:widget)
      expect(widget.versions.length).to(eq(0))
    end
  end
end