This repository has been archived by the owner on Oct 24, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
SubscriberPageSpec.scala
182 lines (161 loc) · 8.24 KB
/
SubscriberPageSpec.scala
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
import org.specs2.mutable._
import org.specs2.runner._
import play.api.test._
import play.api.test.Helpers._
import org.fest.assertions.Assertions.assertThat
import play.api.Application
import play.api.Play
import play.api.Play.current
import models.{ User, Subscriber }
/**
* An integration test will fire up a whole play application in a real (or headless) browser
*/
class SubscriberPagesSpec extends Specification {
def create_user(role: String) = User.make("bob", "bob@example.com", role,
"https://oidc.mit.edu/current_user")
"Subscriber pages" should {
"as an unauthenticated User" should {
// GET /subscribers
"index is allowed" in new WithBrowser(
app = FakeApplication(additionalConfiguration = inMemoryDatabase())) {
val sub_user = create_user("not_current_user")
val sub = Subscriber.make(sub_user.id, "Sub Name", "cat", "contact",
Some("link"), Some("logo"))
browser.goTo("http://localhost:" + port + "/subscribers")
assertThat(browser.title()).isEqualTo("Subscribers - TopicHub")
browser.pageSource must contain("Sign Up »")
}
// GET /subscribers/browse
"browsing is allowed" in new WithBrowser(
app = FakeApplication(additionalConfiguration = inMemoryDatabase())) {
val sub_user = User.make("bob", "bob@example.com", "role", "sub_identity")
val sub = Subscriber.make(sub_user.id, "Sub Name", "cat", "contact",
Some("link"), Some("logo"))
browser.goTo("http://localhost:" + port + "/subscribers/browse?filter=category&value=" + sub.category)
assertThat(browser.title()).isEqualTo("Subscriber Browse - TopicHub")
browser.pageSource must contain("""<a href="/subscriber/1">""")
}
// GET /subscribers/create
"accessing new form redirects to login" in new WithBrowser(
app = FakeApplication(additionalConfiguration = inMemoryDatabase())) {
browser.goTo("http://localhost:" + port + "/subscribers/create")
assertThat(browser.title()).isEqualTo("Login to SCOAP3 - TopicHub")
}
// POST /subscribers
"posting to create redirects to login" in new WithBrowser(
app = FakeApplication(additionalConfiguration = inMemoryDatabase())) {
val action = route(FakeRequest(POST, "/subscribers")).get
redirectLocation(action) must beSome.which(_ == "/login")
}
// GET /subscriber/:id/edit
"edit redirects to login" in new WithBrowser(
app = FakeApplication(additionalConfiguration = inMemoryDatabase())) {
val sub_user = User.make("bob", "bob@example.com", "role", "sub_identity")
val sub = Subscriber.make(sub_user.id, "Sub Name", "cat", "contact",
Some("link"), Some("logo"))
browser.goTo("http://localhost:" + port + "/subscriber/" + sub.id + "/edit")
assertThat(browser.title()).isEqualTo("Login to SCOAP3 - TopicHub")
}
// GET /subscriber/:id
"view is allowed" in new WithBrowser(
app = FakeApplication(additionalConfiguration = inMemoryDatabase())) {
val sub_user = User.make("bob", "bob@example.com", "role", "sub_identity")
val sub = Subscriber.make(sub_user.id, "Sub Name", "cat", "contact",
Some("link"), Some("logo"))
browser.goTo("http://localhost:" + port + "/subscriber/" + sub.id)
assertThat(browser.title()).isEqualTo("Subscriber - TopicHub")
}
}
"as a User with no Associated Subscriber" should {
// GET /subscribers/create
"accessing new form is allowed" in new WithBrowser(
app = FakeApplication(additionalConfiguration = inMemoryDatabase())) {
create_user("someone")
browser.goTo("http://localhost:" + port + "/login")
browser.$("#openid").click
browser.goTo("http://localhost:" + port + "/subscribers/create")
assertThat(browser.title()).isEqualTo("Create Subscriber - TopicHub")
}
// POST /subscribers
"posting to create is allowed" in new WithBrowser(
app = FakeApplication(additionalConfiguration = inMemoryDatabase())) {
val user = create_user("someone")
browser.goTo("http://localhost:" + port + "/login")
browser.$("#openid").click
browser.goTo("http://localhost:" + port + "/subscribers/create")
// without required fields
browser.$("#submit").click
browser.pageSource must contain("This field is required")
Subscriber.findByUserId(user.id).size must equalTo(0)
Subscriber.all.size must equalTo(0)
// with required fields
browser.$("#name").text("Some Subscriber Name")
browser.$("#contact").text("sub@example.com")
browser.$("#link").text("http://example.com")
browser.$("#logo").text("http://example.com/logo.png")
browser.$("#submit").click
Subscriber.findByUserId(user.id).size must equalTo(1)
Subscriber.all.size must equalTo(1)
}
// GET /subscriber/:id/edit
"edit redirects to Error" in new WithBrowser(
app = FakeApplication(additionalConfiguration = inMemoryDatabase())) {
val sub_user = User.make("sub", "sub@example.com", "role", "sub_identity")
val sub = Subscriber.make(sub_user.id, "Sub Name", "cat", "contact",
Some("link"), Some("logo"))
create_user("someone")
browser.goTo("http://localhost:" + port + "/login")
browser.$("#openid").click
browser.goTo("http://localhost:" + port + "/subscriber/" + sub.id + "/edit")
assertThat(browser.title()).isEqualTo("Error - TopicHub")
browser.pageSource must contain("You are not authorized")
}
}
"as a User with an Associate Subscriber" should {
// GET /subscribers/create
"accessing new form is allowed" in new WithBrowser(
app = FakeApplication(additionalConfiguration = inMemoryDatabase())) {
val user = User.make("sub", "sub@example.com", "role", "https://oidc.mit.edu/current_user")
val sub = Subscriber.make(user.id, "Sub Name", "cat", "contact",
Some("link"), Some("logo"))
browser.goTo("http://localhost:" + port + "/login")
browser.$("#openid").click
browser.goTo("http://localhost:" + port + "/subscribers/create")
assertThat(browser.title()).isEqualTo("Create Subscriber - TopicHub")
}
// POST /subscribers
"posting to create is allowed (user can create multiple subscribers)" in new WithBrowser(
app = FakeApplication(additionalConfiguration = inMemoryDatabase())) {
val user = User.make("sub", "sub@example.com", "role", "https://oidc.mit.edu/current_user")
val sub = Subscriber.make(user.id, "Sub Name", "cat", "contact",
Some("link"), Some("logo"))
browser.goTo("http://localhost:" + port + "/login")
browser.$("#openid").click
browser.goTo("http://localhost:" + port + "/subscribers/create")
Subscriber.all.size must equalTo(1)
// without required fields
browser.$("#submit").click
browser.pageSource must contain("This field is required")
Subscriber.all.size must equalTo(1)
// with required fields
browser.$("#name").text("Some Subscriber Name")
browser.$("#contact").text("sub@example.com")
browser.$("#link").text("http://example.com")
browser.$("#logo").text("http://example.com/logo.png")
browser.$("#submit").click
Subscriber.all.size must equalTo(2)
}
// GET /subscriber/:id/edit
"edit is allowed" in new WithBrowser(
app = FakeApplication(additionalConfiguration = inMemoryDatabase())) {
val user = User.make("sub", "sub@example.com", "role", "https://oidc.mit.edu/current_user")
val sub = Subscriber.make(user.id, "Sub Name", "cat", "contact",
Some("link"), Some("logo"))
browser.goTo("http://localhost:" + port + "/login")
browser.$("#openid").click
browser.goTo("http://localhost:" + port + "/subscriber/" + sub.id + "/edit")
assertThat(browser.title()).isEqualTo("Edit Subscriber - TopicHub")
}
}
}
}