eventify 1.5.4 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,25 @@
1
+ require "spec_helper"
2
+
3
+ describe Eventify::Provider::ApolloKino do
4
+ context "#fetch" do
5
+ it "fetches events" do
6
+ stub_request(:get, URI.join(Eventify::Provider::ApolloKino::URL, "eng/soon").to_s).to_return(body: File.read(File.expand_path("../../support/apollo_kino.html", __dir__)))
7
+
8
+ events = Eventify::Provider::ApolloKino.fetch
9
+ expect(events).to eq([
10
+ Eventify::Provider::ApolloKino.new(
11
+ title: "Võimlemisklubi Janika TALVEKONTSERT",
12
+ link: "https://www.apollokino.ee/eng/event/4127/title/v%C3%B5imlemisklubi_janika_talvekontsert/",
13
+ date: Time.parse("2021-01-31"),
14
+ id: "https://www.apollokino.ee/eng/event/4127/title/v%C3%B5imlemisklubi_janika_talvekontsert/"
15
+ ),
16
+ Eventify::Provider::ApolloKino.new(
17
+ title: "Jurassic World: Dominion",
18
+ link: "https://www.apollokino.ee/eng/event/4064/title/jurassic_world_dominion/",
19
+ date: Time.parse("2022-06-10"),
20
+ id: "https://www.apollokino.ee/eng/event/4064/title/jurassic_world_dominion/",
21
+ ),
22
+ ])
23
+ end
24
+ end
25
+ end
@@ -1,145 +1,145 @@
1
- require "spec_helper"
2
-
3
- describe Eventify::Provider::Base do
4
- context ".fetch" do
5
- it "needs to be implemented" do
6
- class Eventify::Provider::CustomEvent < Eventify::Provider::Base; end
7
-
8
- expect {
9
- Eventify::Provider::CustomEvent.fetch
10
- }.to raise_error(NotImplementedError)
11
- end
12
- end
13
-
14
- context "#initialize" do
15
- it "parses raw event" do
16
- event = {
17
- id: "86362",
18
- title: "Koit Toome ja Karl-Erik Taukar 17.01.2014 - 21:00 - Rock Cafe, Tallinn, Eesti",
19
- link: "http://www.piletilevi.ee/est/piletid/muusika/rock_ja_pop/?concert=138090",
20
- date: Time.parse("2013-12-27 12:30:11"),
21
- }
22
-
23
- parsed_event = Eventify::Provider::Base.new(event)
24
- parsed_event.id.should == "86362"
25
- parsed_event.provider.should == "Eventify::Provider::Base"
26
- parsed_event.title.should == event[:title]
27
- parsed_event.link.should == event[:link]
28
- parsed_event.date.should == event[:date]
29
- end
30
-
31
- it "raises an error when id is missing" do
32
- event = {
33
- title: "Koit Toome ja Karl-Erik Taukar 17.01.2014 - 21:00 - Rock Cafe, Tallinn, Eesti",
34
- link: "http://www.piletilevi.ee/est/piletid/muusika/rock_ja_pop/?concert=138090",
35
- date: Time.parse("2013-12-27 12:30:11"),
36
- }
37
-
38
- expect {
39
- Eventify::Provider::Base.new(event)
40
- }.to raise_error(Eventify::Provider::Base::MissingAttributeError)
41
- end
42
-
43
- it "raises an error when title is missing" do
44
- event = {
45
- id: "86362",
46
- link: "http://www.piletilevi.ee/est/piletid/muusika/rock_ja_pop/?concert=138090",
47
- date: Time.parse("2013-12-27 12:30:11"),
48
- }
49
-
50
- expect {
51
- Eventify::Provider::Base.new(event)
52
- }.to raise_error(Eventify::Provider::Base::MissingAttributeError)
53
- end
54
-
55
- it "raises an error when link is missing" do
56
- event = {
57
- id: "86362",
58
- title: "Koit Toome ja Karl-Erik Taukar 17.01.2014 - 21:00 - Rock Cafe, Tallinn, Eesti",
59
- date: Time.parse("2013-12-27 12:30:11"),
60
- }
61
-
62
- expect {
63
- Eventify::Provider::Base.new(event)
64
- }.to raise_error(Eventify::Provider::Base::MissingAttributeError)
65
- end
66
- end
67
-
68
- context "#provider" do
69
- it "uses class name" do
70
- class Eventify::Provider::CustomEvent < Eventify::Provider::Base; end
71
- Eventify::Provider::CustomEvent.new(id: "123", title: "foo", link: "http://example.org").provider.should == "Eventify::Provider::CustomEvent"
72
- end
73
- end
74
-
75
- context "#==" do
76
- it "true when id and provider match" do
77
- Eventify::Provider::Base.new(id: "123", title: "foo", link: "http://example.org").should == Eventify::Provider::Base.new(id: "123", title: "foo", link: "http://example.org")
78
- end
79
-
80
- it "false when id does not match" do
81
- Eventify::Provider::Base.new(id: "123", title: "foo", link: "http://example.org").should_not == Eventify::Provider::Base.new(id: "321", title: "foo", link: "http://example.org")
82
- end
83
-
84
- it "false when class does not match" do
85
- class Eventify::Provider::CustomEvent < Eventify::Provider::Base; end
86
- Eventify::Provider::CustomEvent.new(id: "123", title: "foo", link: "http://example.org").should_not == Eventify::Provider::Base.new(id: "123", title: "foo", link: "http://example.org")
87
- end
88
- end
89
-
90
- context "#save" do
91
- it "saves event into database" do
92
- event = {
93
- id: "86362",
94
- title: "Koit Toome ja Karl-Erik Taukar 17.01.2014 - 21:00 - Rock Cafe, Tallinn, Eesti",
95
- link: "http://www.piletilevi.ee/est/piletid/muusika/rock_ja_pop/?concert=138090",
96
- date: Time.parse("2013-12-27 12:30:11"),
97
- }
98
- Eventify::Provider::Base.new(event).save
99
-
100
- Eventify::Database.events.size.should == 1
101
- end
102
-
103
- it "returns self" do
104
- event = {
105
- id: "86362",
106
- title: "Koit Toome ja Karl-Erik Taukar 17.01.2014 - 21:00 - Rock Cafe, Tallinn, Eesti",
107
- link: "http://www.piletilevi.ee/est/piletid/muusika/rock_ja_pop/?concert=138090",
108
- date: Time.parse("2013-12-27 12:30:11"),
109
- }
110
- event_instance = Eventify::Provider::Base.new(event)
111
- event_instance.save.should == event_instance
112
- end
113
- end
114
-
115
- context "#exists?" do
116
- it "true for existing event" do
117
- event = {
118
- id: "86362",
119
- title: "Koit Toome ja Karl-Erik Taukar 17.01.2014 - 21:00 - Rock Cafe, Tallinn, Eesti",
120
- link: "http://www.piletilevi.ee/est/piletid/muusika/rock_ja_pop/?concert=138090",
121
- date: Time.parse("2013-12-27 12:30:11"),
122
- }
123
- Eventify::Provider::Base.new(event).save
124
-
125
- Eventify::Provider::Base.new(event).should exist
126
- end
127
-
128
- it "false for not existing event" do
129
- event = {
130
- id: "86362",
131
- title: "Koit Toome ja Karl-Erik Taukar 17.01.2014 - 21:00 - Rock Cafe, Tallinn, Eesti",
132
- link: "http://www.piletilevi.ee/est/piletid/muusika/rock_ja_pop/?concert=138090",
133
- date: Time.parse("2013-12-27 12:30:11"),
134
- }
135
-
136
- Eventify::Provider::Base.new(event).should_not exist
137
- end
138
- end
139
-
140
- it "sorts by title" do
141
- event1 = Eventify::Provider::Base.new(id: "123", title: "foo", link: "http://example.org")
142
- event2 = Eventify::Provider::Piletilevi.new(id: "123", title: "bar", link: "http://example.org")
143
- [event1, event2].sort.should == [event2, event1]
144
- end
145
- end
1
+ require "spec_helper"
2
+
3
+ describe Eventify::Provider::Base do
4
+ context ".fetch" do
5
+ it "needs to be implemented" do
6
+ class Eventify::Provider::CustomEvent < Eventify::Provider::Base; end
7
+
8
+ expect {
9
+ Eventify::Provider::CustomEvent.fetch
10
+ }.to raise_error(NotImplementedError)
11
+ end
12
+ end
13
+
14
+ context "#initialize" do
15
+ it "parses raw event" do
16
+ event = {
17
+ id: "86362",
18
+ title: "Koit Toome ja Karl-Erik Taukar 17.01.2014 - 21:00 - Rock Cafe, Tallinn, Eesti",
19
+ link: "http://www.piletilevi.ee/est/piletid/muusika/rock_ja_pop/?concert=138090",
20
+ date: Time.parse("2013-12-27 12:30:11"),
21
+ }
22
+
23
+ parsed_event = Eventify::Provider::Base.new(event)
24
+ expect(parsed_event.id).to eq("86362")
25
+ expect(parsed_event.provider).to eq("Eventify::Provider::Base")
26
+ expect(parsed_event.title).to eq(event[:title])
27
+ expect(parsed_event.link).to eq(event[:link])
28
+ expect(parsed_event.date).to eq(event[:date])
29
+ end
30
+
31
+ it "raises an error when id is missing" do
32
+ event = {
33
+ title: "Koit Toome ja Karl-Erik Taukar 17.01.2014 - 21:00 - Rock Cafe, Tallinn, Eesti",
34
+ link: "http://www.piletilevi.ee/est/piletid/muusika/rock_ja_pop/?concert=138090",
35
+ date: Time.parse("2013-12-27 12:30:11"),
36
+ }
37
+
38
+ expect {
39
+ Eventify::Provider::Base.new(event)
40
+ }.to raise_error(Eventify::Provider::Base::MissingAttributeError)
41
+ end
42
+
43
+ it "raises an error when title is missing" do
44
+ event = {
45
+ id: "86362",
46
+ link: "http://www.piletilevi.ee/est/piletid/muusika/rock_ja_pop/?concert=138090",
47
+ date: Time.parse("2013-12-27 12:30:11"),
48
+ }
49
+
50
+ expect {
51
+ Eventify::Provider::Base.new(event)
52
+ }.to raise_error(Eventify::Provider::Base::MissingAttributeError)
53
+ end
54
+
55
+ it "raises an error when link is missing" do
56
+ event = {
57
+ id: "86362",
58
+ title: "Koit Toome ja Karl-Erik Taukar 17.01.2014 - 21:00 - Rock Cafe, Tallinn, Eesti",
59
+ date: Time.parse("2013-12-27 12:30:11"),
60
+ }
61
+
62
+ expect {
63
+ Eventify::Provider::Base.new(event)
64
+ }.to raise_error(Eventify::Provider::Base::MissingAttributeError)
65
+ end
66
+ end
67
+
68
+ context "#provider" do
69
+ it "uses class name" do
70
+ class Eventify::Provider::CustomEvent < Eventify::Provider::Base; end
71
+ expect(Eventify::Provider::CustomEvent.new(id: "123", title: "foo", link: "http://example.org").provider).to eq("Eventify::Provider::CustomEvent")
72
+ end
73
+ end
74
+
75
+ context "#==" do
76
+ it "true when id and provider match" do
77
+ expect(Eventify::Provider::Base.new(id: "123", title: "foo", link: "http://example.org")).to eq(Eventify::Provider::Base.new(id: "123", title: "foo", link: "http://example.org"))
78
+ end
79
+
80
+ it "false when id does not match" do
81
+ expect(Eventify::Provider::Base.new(id: "123", title: "foo", link: "http://example.org")).not_to eq(Eventify::Provider::Base.new(id: "321", title: "foo", link: "http://example.org"))
82
+ end
83
+
84
+ it "false when class does not match" do
85
+ class Eventify::Provider::CustomEvent < Eventify::Provider::Base; end
86
+ expect(Eventify::Provider::CustomEvent.new(id: "123", title: "foo", link: "http://example.org")).not_to eq(Eventify::Provider::Base.new(id: "123", title: "foo", link: "http://example.org"))
87
+ end
88
+ end
89
+
90
+ context "#save" do
91
+ it "saves event into database" do
92
+ event = {
93
+ id: "86362",
94
+ title: "Koit Toome ja Karl-Erik Taukar 17.01.2014 - 21:00 - Rock Cafe, Tallinn, Eesti",
95
+ link: "http://www.piletilevi.ee/est/piletid/muusika/rock_ja_pop/?concert=138090",
96
+ date: Time.parse("2013-12-27 12:30:11"),
97
+ }
98
+ Eventify::Provider::Base.new(event).save
99
+
100
+ expect(Eventify::Database.events.size).to eq(1)
101
+ end
102
+
103
+ it "returns self" do
104
+ event = {
105
+ id: "86362",
106
+ title: "Koit Toome ja Karl-Erik Taukar 17.01.2014 - 21:00 - Rock Cafe, Tallinn, Eesti",
107
+ link: "http://www.piletilevi.ee/est/piletid/muusika/rock_ja_pop/?concert=138090",
108
+ date: Time.parse("2013-12-27 12:30:11"),
109
+ }
110
+ event_instance = Eventify::Provider::Base.new(event)
111
+ expect(event_instance.save).to eq(event_instance)
112
+ end
113
+ end
114
+
115
+ context "#exists?" do
116
+ it "true for existing event" do
117
+ event = {
118
+ id: "86362",
119
+ title: "Koit Toome ja Karl-Erik Taukar 17.01.2014 - 21:00 - Rock Cafe, Tallinn, Eesti",
120
+ link: "http://www.piletilevi.ee/est/piletid/muusika/rock_ja_pop/?concert=138090",
121
+ date: Time.parse("2013-12-27 12:30:11"),
122
+ }
123
+ Eventify::Provider::Base.new(event).save
124
+
125
+ expect(Eventify::Provider::Base.new(event)).to exist
126
+ end
127
+
128
+ it "false for not existing event" do
129
+ event = {
130
+ id: "86362",
131
+ title: "Koit Toome ja Karl-Erik Taukar 17.01.2014 - 21:00 - Rock Cafe, Tallinn, Eesti",
132
+ link: "http://www.piletilevi.ee/est/piletid/muusika/rock_ja_pop/?concert=138090",
133
+ date: Time.parse("2013-12-27 12:30:11"),
134
+ }
135
+
136
+ expect(Eventify::Provider::Base.new(event)).not_to exist
137
+ end
138
+ end
139
+
140
+ it "sorts by title" do
141
+ event1 = Eventify::Provider::Base.new(id: "123", title: "foo", link: "http://example.org")
142
+ event2 = Eventify::Provider::Piletilevi.new(id: "123", title: "bar", link: "http://example.org")
143
+ expect([event1, event2].sort).to eq([event2, event1])
144
+ end
145
+ end
@@ -0,0 +1,25 @@
1
+ require "spec_helper"
2
+
3
+ describe Eventify::Provider::Livenation do
4
+ context "#fetch" do
5
+ it "fetches events" do
6
+ stub_request(:get, Eventify::Provider::Livenation::URL).to_return(body: File.read(File.expand_path("../../support/livenation.html", __dir__)))
7
+
8
+ events = Eventify::Provider::Livenation.fetch
9
+ expect(events).to eq([
10
+ Eventify::Provider::Livenation.new(
11
+ title: "CLANNAD - In A Lifetime Farewell Tour",
12
+ link: "https://www.livenation.ee/show/1310067/clannad-in-a-lifetime-farewell-tour/tallinn/2021-03-30/ee",
13
+ date: Time.parse("2021-3-30"),
14
+ id: "https://www.livenation.ee/show/1310067/clannad-in-a-lifetime-farewell-tour/tallinn/2021-03-30/ee"
15
+ ),
16
+ Eventify::Provider::Livenation.new(
17
+ title: "JAMES BLUNT - Once Upon A Mind Tour",
18
+ link: "https://www.livenation.ee/show/1310003/james-blunt-once-upon-a-mind-tour/tallinn/2021-06-03/ee",
19
+ date: Time.parse("2021-6-03"),
20
+ id: "https://www.livenation.ee/show/1310003/james-blunt-once-upon-a-mind-tour/tallinn/2021-06-03/ee"
21
+ )
22
+ ])
23
+ end
24
+ end
25
+ end
@@ -1,46 +1,46 @@
1
- require "spec_helper"
2
-
3
- describe Eventify::Provider::Piletilevi do
4
- context "#fetch" do
5
- it "fetches events" do
6
- stub_request(:get, Eventify::Provider::Piletilevi::URL.to_s).to_return(body: File.read(File.expand_path("../../support/piletilevi.json", __dir__)))
7
-
8
- events = Eventify::Provider::Piletilevi.fetch
9
- events.should == [
10
- Eventify::Provider::Piletilevi.new(
11
- title:"Jelena Vaenga \/ \u0415\u043b\u0435\u043d\u0430 \u0412\u0430\u0435\u043d\u0433\u0430",
12
- link:"http:/\/www.piletilevi.ee\/est\/piletid\/muusika\/rock-ja-pop\/jelena-vaenga-elena-vaenga-190326\/",
13
- date: Time.at(1484326800),
14
- id: "190326"
15
- ),
16
- Eventify::Provider::Piletilevi.new(
17
- title:"Head t\u00fc\u00fcbid",
18
- link:"http:\/\/www.piletilevi.ee\/est\/piletid\/film\/krimifilm\/head-tuubid-190410\/",
19
- date: Time.at(1465405200),
20
- id: "190410"
21
- ),
22
- Eventify::Provider::Piletilevi.new(
23
- title:"Teismelised ninjakilpkonnad: Varjust v\u00e4lja (3D)",
24
- link:"http:\/\/www.piletilevi.ee\/est\/piletid\/film\/marul\/teismelised-ninjakilpkonnad-varjust-valja-3d-190405\/",
25
- date: Time.at(1465491600),
26
- id: "190405"
27
- )
28
- ]
29
- end
30
-
31
- it "works without concerts" do
32
- stub_request(:get, Eventify::Provider::Piletilevi::URL.to_s).to_return(body: %q|{"responseData": {}}|)
33
- Eventify::Provider::Piletilevi.fetch.should == []
34
- end
35
-
36
- it "works without response data" do
37
- stub_request(:get, Eventify::Provider::Piletilevi::URL.to_s).to_return(body: %q|{"foo": {}}|)
38
- Eventify::Provider::Piletilevi.fetch.should == []
39
- end
40
-
41
- it "works without json response" do
42
- stub_request(:get, Eventify::Provider::Piletilevi::URL.to_s).to_return(body: %q|foo|)
43
- Eventify::Provider::Piletilevi.fetch.should == []
44
- end
45
- end
46
- end
1
+ require "spec_helper"
2
+
3
+ describe Eventify::Provider::Piletilevi do
4
+ context "#fetch" do
5
+ it "fetches events" do
6
+ stub_request(:get, Eventify::Provider::Piletilevi::URL.to_s).to_return(body: File.read(File.expand_path("../../support/piletilevi.json", __dir__)))
7
+
8
+ events = Eventify::Provider::Piletilevi.fetch
9
+ expect(events).to eq([
10
+ Eventify::Provider::Piletilevi.new(
11
+ title:"Jelena Vaenga \/ \u0415\u043b\u0435\u043d\u0430 \u0412\u0430\u0435\u043d\u0433\u0430",
12
+ link:"http:/\/www.piletilevi.ee\/est\/piletid\/muusika\/rock-ja-pop\/jelena-vaenga-elena-vaenga-190326\/",
13
+ date: Time.at(1484326800),
14
+ id: "190326"
15
+ ),
16
+ Eventify::Provider::Piletilevi.new(
17
+ title:"Head t\u00fc\u00fcbid",
18
+ link:"http:\/\/www.piletilevi.ee\/est\/piletid\/film\/krimifilm\/head-tuubid-190410\/",
19
+ date: Time.at(1465405200),
20
+ id: "190410"
21
+ ),
22
+ Eventify::Provider::Piletilevi.new(
23
+ title:"Teismelised ninjakilpkonnad: Varjust v\u00e4lja (3D)",
24
+ link:"http:\/\/www.piletilevi.ee\/est\/piletid\/film\/marul\/teismelised-ninjakilpkonnad-varjust-valja-3d-190405\/",
25
+ date: Time.at(1465491600),
26
+ id: "190405"
27
+ )
28
+ ])
29
+ end
30
+
31
+ it "works without concerts" do
32
+ stub_request(:get, Eventify::Provider::Piletilevi::URL.to_s).to_return(body: %q|{"responseData": {}}|)
33
+ expect(Eventify::Provider::Piletilevi.fetch).to eq([])
34
+ end
35
+
36
+ it "works without response data" do
37
+ stub_request(:get, Eventify::Provider::Piletilevi::URL.to_s).to_return(body: %q|{"foo": {}}|)
38
+ expect(Eventify::Provider::Piletilevi.fetch).to eq([])
39
+ end
40
+
41
+ it "works without json response" do
42
+ stub_request(:get, Eventify::Provider::Piletilevi::URL.to_s).to_return(body: %q|foo|)
43
+ expect(Eventify::Provider::Piletilevi.fetch).to eq([])
44
+ end
45
+ end
46
+ end
@@ -1,155 +1,155 @@
1
- require "spec_helper"
2
-
3
- describe Eventify do
4
- before do
5
- stub_const "Eventify::Configuration::PATH", File.join(Dir.tmpdir, "eventify-config.yml")
6
- File.delete Eventify::Configuration::PATH if File.exists? Eventify::Configuration::PATH
7
- end
8
-
9
- context "#initialize" do
10
- it "initializes configuration" do
11
- Eventify.new.configuration[:subscribers].should == ["user@example.org"]
12
- end
13
-
14
- it "allows to override configuration" do
15
- Eventify.new(foo: "bar").configuration[:foo].should == "bar"
16
- end
17
- end
18
-
19
- context "#configuration" do
20
- it "provides access to the configuration instance" do
21
- eventify = Eventify.new
22
- eventify.configuration.should == eventify.instance_variable_get(:@configuration)
23
- end
24
- end
25
-
26
- context "#new_events" do
27
- it "all are new" do
28
- eventify = Eventify.new
29
- events = [
30
- Eventify::Provider::Base.new(id: "123", title: "foo", link: "http://example.org"),
31
- Eventify::Provider::Base.new(id: "456", title: "bar", link: "http://example.org")
32
- ]
33
- eventify.stub(all_events: events)
34
- eventify.new_events.should == events
35
- end
36
-
37
- it "old ones are filtered out" do
38
- eventify = Eventify.new
39
- old_event = Eventify::Provider::Base.new(id: "123", title: "foo", link: "http://example.org").save
40
- new_event = Eventify::Provider::Base.new(id: "456", title: "bar", link: "http://example.org")
41
- events = [old_event, new_event]
42
- eventify.stub(all_events: events)
43
-
44
- eventify.new_events.should == [new_event]
45
- end
46
-
47
- it "caches the results" do
48
- eventify = Eventify.new
49
-
50
- event = Eventify::Provider::Base.new(id: "123", title: "foo", link: "http://example.org")
51
- eventify.should_receive(:all_events).and_return([event])
52
-
53
- 2.times { eventify.new_events.should == [event] }
54
- end
55
- end
56
-
57
- context "#all_events" do
58
- it "fetches all events from all providers" do
59
- eventify = Eventify.new
60
- eventify.providers.each do |provider|
61
- provider.should_receive :fetch
62
- end
63
-
64
- eventify.all_events
65
- end
66
-
67
- it "combines all events from all providers" do
68
- event1 = Eventify::Provider::Piletilevi.new(id: "123", title: "foo", link: "http://example.org")
69
- event2 = Eventify::Provider::Piletilevi.new(id: "456", title: "bar", link: "http://example.org")
70
- Eventify::Provider::Piletilevi.stub(fetch: [event1, event2])
71
-
72
- event3 = Eventify::Provider::Base.new(id: "123", title: "foo", link: "http://example.org")
73
- Eventify::Provider::Base.stub(fetch: [event3])
74
-
75
- eventify = Eventify.new
76
- eventify.stub(providers: [Eventify::Provider::Piletilevi, Eventify::Provider::Base])
77
- eventify.all_events.should == [event1, event2, event3]
78
- end
79
-
80
- it "caches results" do
81
- eventify = Eventify.new
82
- eventify.should_receive(:providers).once.and_return([Eventify::Provider::Base])
83
- Eventify::Provider::Base.should_receive(:fetch).once.and_return([1])
84
-
85
- eventify.all_events.should == [1]
86
- eventify.all_events.should == [1]
87
- end
88
-
89
- it "removes duplicate entries" do
90
- event1 = Eventify::Provider::Piletilevi.new(id: "123", title: "foo", link: "http://example.org")
91
- event2 = Eventify::Provider::Piletilevi.new(id: "123", title: "foo", link: "http://example.org")
92
- event1.should == event2
93
- Eventify::Provider::Piletilevi.stub(fetch: [event1, event2])
94
-
95
- eventify = Eventify.new
96
- eventify.stub(providers: [Eventify::Provider::Piletilevi])
97
- eventify.all_events.should == [event1]
98
- end
99
- end
100
-
101
- context "#providers" do
102
- it "returns all providers" do
103
- expected_providers = [
104
- Eventify::Provider::Piletilevi,
105
- Eventify::Provider::FBI,
106
- Eventify::Provider::SolarisKino
107
- ]
108
- Eventify.new.providers.should == expected_providers
109
- end
110
-
111
- it "allows to override" do
112
- eventify = Eventify.new
113
- eventify.providers = ["foo"]
114
-
115
- eventify.providers.should == ["foo"]
116
- end
117
- end
118
-
119
- context "#process_new_events" do
120
- it "sends out e-mail for new events" do
121
- new_events = [
122
- Eventify::Provider::Base.new(id: "123", title: "foo", link: "http://example.org"),
123
- Eventify::Provider::Base.new(id: "456", title: "bar", link: "http://example.org")
124
- ]
125
- configuration = double("configuration")
126
- eventify = Eventify.new configuration
127
- eventify.should_receive(:new_events).and_return(new_events)
128
- Eventify::Mail.should_receive(:deliver).with(new_events, configuration)
129
-
130
- eventify.process_new_events
131
- end
132
-
133
- it "does not send e-mail when no new events" do
134
- eventify = Eventify.new
135
- eventify.should_receive(:new_events).and_return([])
136
- Eventify::Mail.should_not_receive(:deliver)
137
-
138
- eventify.process_new_events
139
- end
140
-
141
- it "saves new events into database" do
142
- new_events = [
143
- Eventify::Provider::Base.new(id: "123", title: "foo", link: "http://example.org/1", date: Time.now),
144
- Eventify::Provider::Base.new(id: "456", title: "bar", link: "http://example.org/2", date: Time.now)
145
- ]
146
- eventify = Eventify.new
147
- eventify.should_receive(:new_events).and_return(new_events)
148
- Eventify::Mail.stub(:deliver)
149
-
150
- eventify.process_new_events
151
-
152
- Eventify::Database.events.size.should == 2
153
- end
154
- end
155
- end
1
+ require "spec_helper"
2
+
3
+ describe Eventify do
4
+ before do
5
+ stub_const "Eventify::Configuration::PATH", File.join(Dir.tmpdir, "eventify-config.yml")
6
+ File.delete Eventify::Configuration::PATH if File.exists? Eventify::Configuration::PATH
7
+ end
8
+
9
+ context "#initialize" do
10
+ it "initializes configuration" do
11
+ expect(Eventify.new.configuration[:subscribers]).to eq(["user@example.org"])
12
+ end
13
+
14
+ it "allows to override configuration" do
15
+ expect(Eventify.new(foo: "bar").configuration[:foo]).to eq("bar")
16
+ end
17
+ end
18
+
19
+ context "#configuration" do
20
+ it "provides access to the configuration instance" do
21
+ eventify = Eventify.new
22
+ expect(eventify.configuration).to eq(eventify.instance_variable_get(:@configuration))
23
+ end
24
+ end
25
+
26
+ context "#new_events" do
27
+ it "all are new" do
28
+ eventify = Eventify.new
29
+ events = [
30
+ Eventify::Provider::Base.new(id: "123", title: "foo", link: "http://example.org"),
31
+ Eventify::Provider::Base.new(id: "456", title: "bar", link: "http://example.org")
32
+ ]
33
+ allow(eventify).to receive_messages(all_events: events)
34
+ expect(eventify.new_events).to eq(events)
35
+ end
36
+
37
+ it "old ones are filtered out" do
38
+ eventify = Eventify.new
39
+ old_event = Eventify::Provider::Base.new(id: "123", title: "foo", link: "http://example.org").save
40
+ new_event = Eventify::Provider::Base.new(id: "456", title: "bar", link: "http://example.org")
41
+ events = [old_event, new_event]
42
+ allow(eventify).to receive_messages(all_events: events)
43
+
44
+ expect(eventify.new_events).to eq([new_event])
45
+ end
46
+
47
+ it "caches the results" do
48
+ eventify = Eventify.new
49
+
50
+ event = Eventify::Provider::Base.new(id: "123", title: "foo", link: "http://example.org")
51
+ expect(eventify).to receive(:all_events).and_return([event])
52
+
53
+ 2.times { expect(eventify.new_events).to eq([event]) }
54
+ end
55
+ end
56
+
57
+ context "#all_events" do
58
+ it "fetches all events from all providers" do
59
+ eventify = Eventify.new
60
+ eventify.providers.each do |provider|
61
+ expect(provider).to receive :fetch
62
+ end
63
+
64
+ eventify.all_events
65
+ end
66
+
67
+ it "combines all events from all providers" do
68
+ event1 = Eventify::Provider::Piletilevi.new(id: "123", title: "foo", link: "http://example.org")
69
+ event2 = Eventify::Provider::Piletilevi.new(id: "456", title: "bar", link: "http://example.org")
70
+ allow(Eventify::Provider::Piletilevi).to receive_messages(fetch: [event1, event2])
71
+
72
+ event3 = Eventify::Provider::Base.new(id: "123", title: "foo", link: "http://example.org")
73
+ allow(Eventify::Provider::Base).to receive_messages(fetch: [event3])
74
+
75
+ eventify = Eventify.new
76
+ allow(eventify).to receive_messages(providers: [Eventify::Provider::Piletilevi, Eventify::Provider::Base])
77
+ expect(eventify.all_events).to eq([event1, event2, event3])
78
+ end
79
+
80
+ it "caches results" do
81
+ eventify = Eventify.new
82
+ expect(eventify).to receive(:providers).once.and_return([Eventify::Provider::Base])
83
+ expect(Eventify::Provider::Base).to receive(:fetch).once.and_return([1])
84
+
85
+ expect(eventify.all_events).to eq([1])
86
+ expect(eventify.all_events).to eq([1])
87
+ end
88
+
89
+ it "removes duplicate entries" do
90
+ event1 = Eventify::Provider::Piletilevi.new(id: "123", title: "foo", link: "http://example.org")
91
+ event2 = Eventify::Provider::Piletilevi.new(id: "123", title: "foo", link: "http://example.org")
92
+ expect(event1).to eq(event2)
93
+ allow(Eventify::Provider::Piletilevi).to receive_messages(fetch: [event1, event2])
94
+
95
+ eventify = Eventify.new
96
+ allow(eventify).to receive_messages(providers: [Eventify::Provider::Piletilevi])
97
+ expect(eventify.all_events).to eq([event1])
98
+ end
99
+ end
100
+
101
+ context "#providers" do
102
+ it "returns all providers" do
103
+ expected_providers = [
104
+ Eventify::Provider::Piletilevi,
105
+ Eventify::Provider::Livenation,
106
+ Eventify::Provider::ApolloKino
107
+ ]
108
+ expect(Eventify.new.providers).to eq(expected_providers)
109
+ end
110
+
111
+ it "allows to override" do
112
+ eventify = Eventify.new
113
+ eventify.providers = ["foo"]
114
+
115
+ expect(eventify.providers).to eq(["foo"])
116
+ end
117
+ end
118
+
119
+ context "#process_new_events" do
120
+ it "sends out e-mail for new events" do
121
+ new_events = [
122
+ Eventify::Provider::Base.new(id: "123", title: "foo", link: "http://example.org"),
123
+ Eventify::Provider::Base.new(id: "456", title: "bar", link: "http://example.org")
124
+ ]
125
+ configuration = double("configuration")
126
+ eventify = Eventify.new configuration
127
+ expect(eventify).to receive(:new_events).and_return(new_events)
128
+ expect(Eventify::Mail).to receive(:deliver).with(new_events, configuration)
129
+
130
+ eventify.process_new_events
131
+ end
132
+
133
+ it "does not send e-mail when no new events" do
134
+ eventify = Eventify.new
135
+ expect(eventify).to receive(:new_events).and_return([])
136
+ expect(Eventify::Mail).not_to receive(:deliver)
137
+
138
+ eventify.process_new_events
139
+ end
140
+
141
+ it "saves new events into database" do
142
+ new_events = [
143
+ Eventify::Provider::Base.new(id: "123", title: "foo", link: "http://example.org/1", date: Time.now),
144
+ Eventify::Provider::Base.new(id: "456", title: "bar", link: "http://example.org/2", date: Time.now)
145
+ ]
146
+ eventify = Eventify.new
147
+ expect(eventify).to receive(:new_events).and_return(new_events)
148
+ allow(Eventify::Mail).to receive(:deliver)
149
+
150
+ eventify.process_new_events
151
+
152
+ expect(Eventify::Database.events.size).to eq(2)
153
+ end
154
+ end
155
+ end