magic_lamp 0.9.9 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +286 -59
- data/app/assets/javascripts/magic_lamp/genie.js +32 -7
- data/app/assets/javascripts/magic_lamp/magic_lamp.js +4 -0
- data/app/controllers/magic_lamp/fixtures_controller.rb +2 -2
- data/lib/magic_lamp.rb +59 -14
- data/lib/magic_lamp/callbacks.rb +24 -0
- data/lib/magic_lamp/configuration.rb +26 -0
- data/lib/magic_lamp/fixture_creator.rb +6 -5
- data/lib/magic_lamp/render_catcher.rb +17 -10
- data/lib/magic_lamp/version.rb +1 -1
- data/lib/tasks/fixture_names_task.rb +7 -0
- data/lib/tasks/lint_task.rb +8 -0
- data/spec/controllers/magic_lamp/fixtures_controller_spec.rb +2 -2
- data/spec/dummy/log/development.log +74880 -0
- data/spec/dummy/log/test.log +223258 -0
- data/spec/dummy/persisted_specs/magic_lamp.rb +5 -0
- data/spec/dummy/persisted_specs/magic_lamp_config.rb +14 -0
- data/spec/dummy/spec/magical/a_lamp_file_with_a_different_name_lamp.rb +7 -0
- data/spec/dummy/spec/magical/magic_lamp.rb +1 -1
- data/spec/dummy/spec/magical/magic_lamp_config.rb +1 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/020414588350dc7f6c910d23b47b2eac +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/04a1e26a9e3fde1f448cb2a9d382fbbc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/09bc89d8ac4ccacfcf2f4db466e7735f +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/0b3144442052dbb8af7f57ca27cd7a15 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/18650d8ff9b0a83b32e55b58917ec791 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/1b2519cef64d534f944996a2326823f6 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/1e42928536d86174d2365d82a034082b +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/292405ba7ff52dbb279572aee49ba174 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/2c66f0d7ef22d32ab110fc31a55fe828 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/2ccef21649a61deac2c84f622753b77b +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/32b0c6aea545968d6da4939bcbab9b5e +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/32d3add1308f63f1ce5eacde1eba7752 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/3823434d99b44359ee75dffba2817055 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/3a2dd1069a3d0cd57769e33920561e09 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/3c8cdd0e5d5eee39df490048c656a2c5 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/40f78fd7fa893a3ba0bb52949d4d6e21 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/4878804f69b49fa9eb8a9c0af84ba31a +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/4af6cefe350f9be6f923a3d72edf1813 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/51333e0ed6511483c511470803d3803a +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/5723ed075d2604a5ae91531445b2a613 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/58367e9b5bd6d94235a07214faacf926 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/5b03eeac2e4ecbaaf227c5aa35808fee +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/5bbf09297502a156801e9c65f4bd3db7 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/5c9e5cf4ec642fa40af2267ef88f3095 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/5ce07b63a8c04b5207f4ce3e753f5cee +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/62b7a364ac8780cbc8d56c1c6434a0a4 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/6f968441247482ba7e1ac7ce9f34dfdb +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/759e97d6d411bc4cef7055a778e1bef3 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/7f5b2f45d9f12db1fb26a605759b360a +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/7f7dcf7837dbb7f150b7364ad7920712 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/80a68d71946643e61d91cc216f7aa32f +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/86023efec2465a88617e5a47a38f1f55 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/87c6d9a5c985ccb321255862fd8c2f48 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/88fe64427f1fff8e41ca8ad0170da88a +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/8a0862dca044d19cadb655c53acb20ab +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/8c4d5b82ba38d47cebae9c56db8fc883 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/8dc2cb33d4af3c73661b4b84b4a95947 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/8e2a04fd6b5a2e086e5d604cb8224809 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/8ed4b4f20fb65446181984e6df7d7c9b +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/8f4a370f455559b7a209ecd758a3bb3d +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/96210dc070e479fcee862294afe5efc1 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/972b6b0bb1fc0b1123077b4b2f4394bd +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/9825272284630c2926f661645205382a +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/9d676cb2f7cb26509cfcd0bce3f08fee +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/acbd4771ecb2a173a35382fbff9317cf +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/b226a96bfa85a5a853dd6566d1706231 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/b29390c73fea05dd0073f043c17a9986 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/b2a142b210c2cbfe4a58040684b3c33c +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/bb57f340ac9df9041014540af079a7f3 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/bfa154e8a12acdbc85028ad8130d9043 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/c84af5f8f55b15818667b16b15416431 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/cf573b52d944e8aea7f1dc03f9be9b2c +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/d53d8d895a44b860d5e1399e1a9a7b69 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/d5b28f340e57aab871a83d30b1294b62 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/d98de652252dc6ae11b5b6db5588705b +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/e52d001ef73b04129baa586e2822018e +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/f0aa53eb377a5d7cc83657ef33b02d25 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/f12e838fbbcc1647156ec47ebbeaac9a +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/f3018c23e25ab4b02fc51d6302f79a0a +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/f30abc368796858ff89a5ff6daf33e6a +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/f5d1b7d2ec1c89dc32cc982b43502dc8 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/f5e8036e8de24870e4db21ccb209e272 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/f6256b2e4e609981d9eb420aae5bef46 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/f62fb3331d14ad448ad997f1fbdb7e23 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/fd203e335fb22b3109d0354b99f45c6e +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/fdc3718e0a84d340a897f87179d95c84 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/spec/javascripts/genie_spec.js +97 -28
- data/spec/javascripts/magic_lamp_spec.js +50 -17
- data/spec/javascripts/spec_helper.js +5 -4
- data/spec/javascripts/support/chai-fuzzy.js +110 -0
- data/spec/lib/callbacks_spec.rb +58 -0
- data/spec/lib/configuration_spec.rb +48 -0
- data/spec/lib/fixture_creator_spec.rb +17 -14
- data/spec/lib/magic_lamp_spec.rb +97 -26
- data/spec/lib/render_catcher_spec.rb +18 -4
- data/spec/rails_helper.rb +2 -0
- data/spec/spec_helper.rb +5 -0
- data/spec/tasks/fixture_names_task_spec.rb +23 -0
- data/spec/tasks/lint_task_spec.rb +17 -0
- data/spec/teaspoon_env.rb +33 -34
- metadata +146 -9
- data/lib/tasks/magic_lamp_tasks.rake +0 -4
- data/spec/dummy/tmp/pids/server.pid +0 -1
@@ -37,10 +37,11 @@
|
|
37
37
|
// You can require your own javascript files here. By default this will include everything in application, however you
|
38
38
|
// may get better load performance if you require the specific files that are being used in the spec that tests them.
|
39
39
|
//= require magic_lamp/application
|
40
|
+
//= require support/underscore-1.6
|
40
41
|
//= require support/chai
|
42
|
+
//= require support/chai-fuzzy
|
41
43
|
//= require support/sinon
|
42
44
|
//= require support/sinon-chai
|
43
|
-
//= require support/underscore-1.6
|
44
45
|
window.expect = chai.expect;
|
45
46
|
|
46
47
|
var spies;
|
@@ -65,12 +66,12 @@ function stub(object, method, retVal) {
|
|
65
66
|
return stubObj;
|
66
67
|
}
|
67
68
|
|
68
|
-
function
|
69
|
-
return document.
|
69
|
+
function findByClassName(className) {
|
70
|
+
return document.getElementsByClassName(className)[0];
|
70
71
|
}
|
71
72
|
|
72
73
|
function testFixtureContainer() {
|
73
|
-
return
|
74
|
+
return findByClassName('magic-lamp');
|
74
75
|
}
|
75
76
|
|
76
77
|
function removeNode(node) {
|
@@ -0,0 +1,110 @@
|
|
1
|
+
(function(plugin){
|
2
|
+
if (
|
3
|
+
typeof require === "function"
|
4
|
+
&& typeof exports === "object"
|
5
|
+
&& typeof module === "object"
|
6
|
+
) {
|
7
|
+
// NodeJS
|
8
|
+
module.exports = plugin;
|
9
|
+
} else if (
|
10
|
+
typeof define === "function"
|
11
|
+
&& define.amd
|
12
|
+
) {
|
13
|
+
// AMD
|
14
|
+
define(function () {
|
15
|
+
return plugin;
|
16
|
+
});
|
17
|
+
} else {
|
18
|
+
// Other environment (usually <script> tag): plug in to global chai instance directly.
|
19
|
+
chai.use(plugin);
|
20
|
+
}
|
21
|
+
}(function(chai, utils){
|
22
|
+
var _;
|
23
|
+
|
24
|
+
if (
|
25
|
+
typeof window === "object"
|
26
|
+
&& typeof window._ == "function"
|
27
|
+
) {
|
28
|
+
// browser-side
|
29
|
+
_ = window._;
|
30
|
+
} else {
|
31
|
+
// server-side
|
32
|
+
_ = require('underscore');
|
33
|
+
}
|
34
|
+
|
35
|
+
// contain => _.where, check _.isEqual
|
36
|
+
// containOnce => contain, check size of returned array
|
37
|
+
// like => _.isEqual
|
38
|
+
|
39
|
+
chai.Assertion.addMethod('like', function(expected){
|
40
|
+
var obj = this._obj
|
41
|
+
this.assert(
|
42
|
+
_.isEqual(obj, expected)
|
43
|
+
, "expected #{this} to be like #{exp}"
|
44
|
+
, "expected #{this} not to be like #{exp}"
|
45
|
+
, expected
|
46
|
+
, obj
|
47
|
+
, true
|
48
|
+
)
|
49
|
+
});
|
50
|
+
|
51
|
+
chai.Assertion.addMethod('jsonOf', function(expected){
|
52
|
+
var obj = this._obj;
|
53
|
+
var expectedAsJSON = JSON.parse(JSON.stringify(expected));
|
54
|
+
|
55
|
+
this.assert(
|
56
|
+
_.isEqual(obj, expectedAsJSON)
|
57
|
+
, "expected #{this} to be like JSON #{exp}"
|
58
|
+
, "expected #{this} not to be like JSON #{exp}"
|
59
|
+
, expectedAsJSON
|
60
|
+
, obj
|
61
|
+
, true
|
62
|
+
)
|
63
|
+
});
|
64
|
+
|
65
|
+
chai.Assertion.addMethod('containOneLike', function(expected){
|
66
|
+
var obj = this._obj
|
67
|
+
|
68
|
+
var _obj = _(obj);
|
69
|
+
|
70
|
+
if (!_obj.isObject() && !_obj.isArray()) {
|
71
|
+
this.assert(
|
72
|
+
false
|
73
|
+
, "expected #{this} to be an array, object, or string"
|
74
|
+
, "expected #{this} to be an array, object, or string"
|
75
|
+
)
|
76
|
+
}
|
77
|
+
|
78
|
+
var found = _obj.some(function(needle){
|
79
|
+
return _.isEqual(needle,expected);
|
80
|
+
});
|
81
|
+
|
82
|
+
this.assert(
|
83
|
+
found
|
84
|
+
, "expected #{this} to contain one thing like #{exp}"
|
85
|
+
, "expected #{this} not to contain one thing like #{exp}"
|
86
|
+
, expected
|
87
|
+
)
|
88
|
+
});
|
89
|
+
|
90
|
+
//export tdd style
|
91
|
+
var assert = chai.assert;
|
92
|
+
assert.like = function (val, exp, msg) {
|
93
|
+
new chai.Assertion(val, msg).to.be.like(exp);
|
94
|
+
};
|
95
|
+
assert.notLike = function (val, exp, msg) {
|
96
|
+
new chai.Assertion(val, msg).to.not.be.like(exp);
|
97
|
+
};
|
98
|
+
assert.containOneLike = function (val, exp, msg) {
|
99
|
+
new chai.Assertion(val, msg).to.containOneLike(exp);
|
100
|
+
};
|
101
|
+
assert.notContainOneLike = function (val, exp, msg) {
|
102
|
+
new chai.Assertion(val, msg).to.not.containOneLike(exp);
|
103
|
+
};
|
104
|
+
assert.jsonOf = function (val, exp, msg) {
|
105
|
+
new chai.Assertion(val, msg).to.be.jsonOf(exp);
|
106
|
+
};
|
107
|
+
assert.notJsonOf = function (val, exp, msg) {
|
108
|
+
new chai.Assertion(val, msg).to.not.be.jsonOf(exp);
|
109
|
+
};
|
110
|
+
}));
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require "rails_helper"
|
2
|
+
|
3
|
+
describe MagicLamp::Callbacks do
|
4
|
+
class DummyObject
|
5
|
+
include MagicLamp::Callbacks
|
6
|
+
end
|
7
|
+
|
8
|
+
subject { DummyObject.new(MagicLamp::Configuration.new) }
|
9
|
+
|
10
|
+
context "attr_accessor" do
|
11
|
+
it { is_expected.to respond_to(:configuration) }
|
12
|
+
it { is_expected.to respond_to(:configuration=) }
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "#initialize" do
|
16
|
+
it "sets configuration to the given argument" do
|
17
|
+
configuration = double
|
18
|
+
subject = DummyObject.new(configuration)
|
19
|
+
expect(subject.configuration).to eq(configuration)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "#execute_before_each_callback" do
|
24
|
+
it "calls the before each callback" do
|
25
|
+
dummy = double
|
26
|
+
expect(dummy).to receive(:call)
|
27
|
+
subject.configuration.before_each_proc = dummy
|
28
|
+
subject.execute_before_each_callback
|
29
|
+
end
|
30
|
+
|
31
|
+
context "no callback" do
|
32
|
+
it "does not raise an error" do
|
33
|
+
subject.configuration.before_each_proc = nil
|
34
|
+
expect do
|
35
|
+
subject.execute_before_each_callback
|
36
|
+
end.to_not raise_error
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "#execute_after_each_callback" do
|
42
|
+
it "calls the after each callback" do
|
43
|
+
dummy = double
|
44
|
+
expect(dummy).to receive(:call)
|
45
|
+
subject.configuration.after_each_proc = dummy
|
46
|
+
subject.execute_after_each_callback
|
47
|
+
end
|
48
|
+
|
49
|
+
context "no callback" do
|
50
|
+
it "does not raise an error" do
|
51
|
+
subject.configuration.after_each_proc = nil
|
52
|
+
expect do
|
53
|
+
subject.execute_after_each_callback
|
54
|
+
end.to_not raise_error
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require "rails_helper"
|
2
|
+
|
3
|
+
describe MagicLamp::Configuration do
|
4
|
+
context "attr_accessor" do
|
5
|
+
it { is_expected.to respond_to :before_each_proc }
|
6
|
+
it { is_expected.to respond_to :before_each_proc= }
|
7
|
+
|
8
|
+
it { is_expected.to respond_to :after_each_proc }
|
9
|
+
it { is_expected.to respond_to :after_each_proc= }
|
10
|
+
|
11
|
+
it { is_expected.to respond_to :infer_names }
|
12
|
+
it { is_expected.to respond_to :infer_names= }
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "#initialize" do
|
16
|
+
it "infers names by default" do
|
17
|
+
expect(subject.infer_names).to eq(true)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "#before_each" do
|
22
|
+
it "saves its given block" do
|
23
|
+
block = proc { "something before" }
|
24
|
+
subject.before_each(&block)
|
25
|
+
expect(subject.before_each_proc).to eq(block)
|
26
|
+
end
|
27
|
+
|
28
|
+
it "raises an error when not given a block" do
|
29
|
+
expect do
|
30
|
+
subject.before_each
|
31
|
+
end.to raise_error(MagicLamp::ArgumentError, /configuration#before_each requires a block/)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "#after_each" do
|
36
|
+
it "saves its given block" do
|
37
|
+
block = proc { "something before" }
|
38
|
+
subject.after_each(&block)
|
39
|
+
expect(subject.after_each_proc).to eq(block)
|
40
|
+
end
|
41
|
+
|
42
|
+
it "raises an error when not given a block" do
|
43
|
+
expect do
|
44
|
+
subject.after_each
|
45
|
+
end.to raise_error(MagicLamp::ArgumentError, /configuration#after_each requires a block/)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -1,21 +1,14 @@
|
|
1
1
|
require "rails_helper"
|
2
2
|
|
3
3
|
describe MagicLamp::FixtureCreator do
|
4
|
-
|
5
|
-
context "render_arguments" do
|
6
|
-
it { should respond_to :render_arguments }
|
7
|
-
it { should respond_to :render_arguments= }
|
8
|
-
end
|
4
|
+
subject { MagicLamp::FixtureCreator.new(MagicLamp::Configuration.new) }
|
9
5
|
|
10
|
-
|
11
|
-
it { should respond_to :namespace }
|
12
|
-
it { should respond_to :namespace= }
|
13
|
-
end
|
14
|
-
end
|
6
|
+
it { is_expected.to be_kind_of(MagicLamp::Callbacks) }
|
15
7
|
|
16
|
-
|
17
|
-
|
18
|
-
|
8
|
+
context "attr_accessor" do
|
9
|
+
context "render_arguments" do
|
10
|
+
it { is_expected.to respond_to :render_arguments }
|
11
|
+
it { is_expected.to respond_to :render_arguments= }
|
19
12
|
end
|
20
13
|
end
|
21
14
|
|
@@ -33,10 +26,20 @@ describe MagicLamp::FixtureCreator do
|
|
33
26
|
it "does not render the layout by default" do
|
34
27
|
expect(rendered).to_not match(/The layout/)
|
35
28
|
end
|
29
|
+
|
30
|
+
it "executes the callbacks around generation of the template" do
|
31
|
+
dummy = double
|
32
|
+
expect(subject).to receive(:execute_before_each_callback).ordered
|
33
|
+
expect(dummy).to receive(:render).ordered
|
34
|
+
expect(subject).to receive(:execute_after_each_callback).ordered
|
35
|
+
subject.generate_template(OrdersController) do
|
36
|
+
dummy.render
|
37
|
+
render :foo
|
38
|
+
end
|
39
|
+
end
|
36
40
|
end
|
37
41
|
|
38
42
|
describe "#new_controller" do
|
39
|
-
|
40
43
|
it "returns an instance of the passed controller class" do
|
41
44
|
expect(subject.new_controller(OrdersController) {} ).to be_a(OrdersController)
|
42
45
|
end
|
data/spec/lib/magic_lamp_spec.rb
CHANGED
@@ -1,17 +1,12 @@
|
|
1
1
|
require "rails_helper"
|
2
2
|
|
3
3
|
describe MagicLamp do
|
4
|
-
before do
|
5
|
-
subject.registered_fixtures = {}
|
6
|
-
end
|
7
|
-
|
8
|
-
after do
|
9
|
-
subject.registered_fixtures = {}
|
10
|
-
end
|
11
|
-
|
12
4
|
context "attr_accessor" do
|
13
|
-
it {
|
14
|
-
it {
|
5
|
+
it { is_expected.to respond_to :registered_fixtures }
|
6
|
+
it { is_expected.to respond_to :registered_fixtures= }
|
7
|
+
|
8
|
+
it { is_expected.to respond_to :configuration }
|
9
|
+
it { is_expected.to respond_to :configuration= }
|
15
10
|
end
|
16
11
|
|
17
12
|
context "aliases" do
|
@@ -26,20 +21,59 @@ describe MagicLamp do
|
|
26
21
|
end
|
27
22
|
end
|
28
23
|
|
24
|
+
describe "#configure" do
|
25
|
+
it "yields a configuration object to the block" do
|
26
|
+
subject.configure do |config|
|
27
|
+
expect(config).to be_a(MagicLamp::Configuration)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
it "replaces its configuration object if called again" do
|
32
|
+
subject.configure { |config| config.infer_names = false }
|
33
|
+
first_config = subject.configuration
|
34
|
+
subject.configure { |config| config.infer_names = false }
|
35
|
+
second_config = subject.configuration
|
36
|
+
expect(first_config).to_not eq(second_config)
|
37
|
+
end
|
38
|
+
|
39
|
+
it "raises an error without a block" do
|
40
|
+
expect do
|
41
|
+
subject.configure
|
42
|
+
end.to raise_error(MagicLamp::ArgumentError, /configure requires a block/)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
context "callbacks with database cleaner" do
|
47
|
+
it "keeps the database clean" do
|
48
|
+
allow(subject).to receive(:path).and_return(Rails.root.join("persisted_specs"))
|
49
|
+
subject.generate_all_fixtures
|
50
|
+
expect(Order.count).to eq(0)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
29
54
|
describe "#register_fixture" do
|
30
55
|
let(:fixture_name) { "foo" }
|
31
56
|
let(:controller_class) { "doesn't matter here" }
|
32
|
-
let(:block) {
|
57
|
+
let(:block) { proc { "so?" } }
|
33
58
|
|
34
59
|
it "caches the controller class and block" do
|
35
|
-
subject.register_fixture(controller_class, fixture_name, &block)
|
60
|
+
subject.register_fixture(controller: controller_class, name: fixture_name, &block)
|
36
61
|
expect(subject.registered_fixtures[fixture_name]).to eq([controller_class, block])
|
37
62
|
end
|
38
63
|
|
39
64
|
it "raises an error without a block" do
|
40
65
|
expect do
|
41
|
-
subject.register_fixture(controller_class, fixture_name)
|
42
|
-
end.to raise_error(ArgumentError, /requires a block/)
|
66
|
+
subject.register_fixture(controller: controller_class, name: fixture_name)
|
67
|
+
end.to raise_error(MagicLamp::ArgumentError, /register_fixture requires a block/)
|
68
|
+
end
|
69
|
+
|
70
|
+
context "don't infer names" do
|
71
|
+
it "raises an error without a specified name" do
|
72
|
+
subject.configuration.infer_names = false
|
73
|
+
expect do
|
74
|
+
subject.register_fixture { render :foo }
|
75
|
+
end.to raise_error(MagicLamp::ArgumentError, /You must specify a name since `infer_names` is configured to `false`/)
|
76
|
+
end
|
43
77
|
end
|
44
78
|
|
45
79
|
context "defaults" do
|
@@ -60,34 +94,39 @@ describe MagicLamp do
|
|
60
94
|
|
61
95
|
context "ApplicationController" do
|
62
96
|
it "uses the first argument to render when given 2" do
|
63
|
-
render_block =
|
64
|
-
subject.register_fixture(::ApplicationController, &render_block)
|
97
|
+
render_block = proc { render :index, foo: :bar }
|
98
|
+
subject.register_fixture(controller: ::ApplicationController, &render_block)
|
65
99
|
|
66
100
|
expect(at_index).to eq([::ApplicationController, render_block])
|
67
101
|
end
|
68
102
|
|
69
103
|
it "uses the only argument when it isn't a hash" do
|
70
|
-
render_block =
|
71
|
-
subject.register_fixture(::ApplicationController, &render_block)
|
104
|
+
render_block = proc { render :index }
|
105
|
+
subject.register_fixture(controller: ::ApplicationController, &render_block)
|
72
106
|
expect(at_index).to eq([::ApplicationController, render_block])
|
73
107
|
end
|
74
108
|
|
109
|
+
it "passes its configuration object to the render catcher" do
|
110
|
+
expect(MagicLamp::RenderCatcher).to receive(:new).with(subject.configuration).and_call_original
|
111
|
+
subject.register_fixture { render :foo }
|
112
|
+
end
|
113
|
+
|
75
114
|
context "1 hash argument" do
|
76
115
|
it "raises an error if it can't figure out a default name" do
|
77
116
|
expect do
|
78
|
-
subject.register_fixture(::ApplicationController) { render collection: [1, 2, 3] }
|
117
|
+
subject.register_fixture(controller: ::ApplicationController) { render collection: [1, 2, 3] }
|
79
118
|
end.to raise_error(MagicLamp::AmbiguousFixtureNameError, /Unable to infer fixture name/)
|
80
119
|
end
|
81
120
|
|
82
121
|
it "uses the name at the template key" do
|
83
|
-
render_block =
|
84
|
-
subject.register_fixture(::ApplicationController, &render_block)
|
122
|
+
render_block = proc { render template: :index }
|
123
|
+
subject.register_fixture(controller: ::ApplicationController, &render_block)
|
85
124
|
expect(at_index).to eq([::ApplicationController, render_block])
|
86
125
|
end
|
87
126
|
|
88
127
|
it "uses the name at the partial key" do
|
89
|
-
render_block =
|
90
|
-
subject.register_fixture(::ApplicationController, &render_block)
|
128
|
+
render_block = proc { render partial: :index }
|
129
|
+
subject.register_fixture(controller: ::ApplicationController, &render_block)
|
91
130
|
expect(at_index).to eq([::ApplicationController, render_block])
|
92
131
|
end
|
93
132
|
end
|
@@ -95,15 +134,35 @@ describe MagicLamp do
|
|
95
134
|
|
96
135
|
context "other controller" do
|
97
136
|
it "prepends the controller's name to the fixture_name" do
|
98
|
-
render_block =
|
99
|
-
subject.register_fixture(OrdersController, &render_block)
|
137
|
+
render_block = proc { render partial: :index }
|
138
|
+
subject.register_fixture(controller: OrdersController, &render_block)
|
100
139
|
expect(subject.registered_fixtures["orders/index"]).to eq([OrdersController, render_block])
|
101
140
|
end
|
141
|
+
|
142
|
+
it "does not prepend the controller's name when it is already the beginning of the string" do
|
143
|
+
render_block = proc { render partial: "orders/order" }
|
144
|
+
subject.register_fixture(controller: OrdersController, &render_block)
|
145
|
+
expect(subject.registered_fixtures["orders/orders/order"]).to be_nil
|
146
|
+
expect(subject.registered_fixtures["orders/order"]).to eq([OrdersController, render_block])
|
147
|
+
end
|
102
148
|
end
|
103
149
|
end
|
104
150
|
end
|
105
151
|
end
|
106
152
|
|
153
|
+
describe "#load_config" do
|
154
|
+
it "loads the magic lamp config file" do
|
155
|
+
expect(subject).to receive(:registered_fixtures)
|
156
|
+
subject.load_config
|
157
|
+
end
|
158
|
+
|
159
|
+
it "does not raise an error if there's no config" do
|
160
|
+
allow(Dir).to receive(:[]).and_return([])
|
161
|
+
expect(subject).to_not receive(:registered_fixtures)
|
162
|
+
subject.load_config
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
107
166
|
describe "#load_lamp_files" do
|
108
167
|
it "loads all lamp files" do
|
109
168
|
subject.load_lamp_files
|
@@ -119,6 +178,11 @@ describe MagicLamp do
|
|
119
178
|
subject.load_lamp_files
|
120
179
|
expect(subject.registered_fixtures).to_not equal(old_registry)
|
121
180
|
end
|
181
|
+
|
182
|
+
it "loads its config" do
|
183
|
+
expect(subject).to receive(:load_config)
|
184
|
+
subject.load_lamp_files
|
185
|
+
end
|
122
186
|
end
|
123
187
|
|
124
188
|
describe "#registered?" do
|
@@ -134,7 +198,7 @@ describe MagicLamp do
|
|
134
198
|
end
|
135
199
|
|
136
200
|
describe "#generate_fixture" do
|
137
|
-
let(:block) {
|
201
|
+
let(:block) { proc { render :foo } }
|
138
202
|
|
139
203
|
before do
|
140
204
|
subject.registered_fixtures["foo_test"] = [OrdersController, block]
|
@@ -149,6 +213,13 @@ describe MagicLamp do
|
|
149
213
|
subject.generate_fixture("brokenture")
|
150
214
|
end.to raise_error(MagicLamp::UnregisteredFixtureError, /is not a registered fixture/)
|
151
215
|
end
|
216
|
+
|
217
|
+
it "passes its configuration object to the render catcher" do
|
218
|
+
subject.registered_fixtures["foo"] = []
|
219
|
+
dummy = double(generate_template: :generate_template)
|
220
|
+
expect(MagicLamp::FixtureCreator).to receive(:new).with(subject.configuration).and_return(dummy)
|
221
|
+
subject.generate_fixture("foo")
|
222
|
+
end
|
152
223
|
end
|
153
224
|
|
154
225
|
describe "#generate_all_fixtures" do
|