discourse_api 1.1.0 → 2.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +23 -10
- data/.rubocop.yml +1 -1
- data/.streerc +2 -0
- data/CHANGELOG.md +5 -0
- data/Gemfile +1 -1
- data/README.md +0 -4
- data/discourse_api.gemspec +7 -4
- data/examples/backups.rb +5 -5
- data/examples/badges.rb +5 -5
- data/examples/bookmark_topic.rb +5 -5
- data/examples/category.rb +10 -6
- data/examples/change_topic_status.rb +12 -11
- data/examples/create_private_message.rb +6 -6
- data/examples/create_topic.rb +9 -9
- data/examples/create_update_category.rb +13 -16
- data/examples/create_user.rb +12 -11
- data/examples/dashboard.rb +5 -5
- data/examples/disposable_invite_tokens.rb +9 -10
- data/examples/example.rb +5 -5
- data/examples/group_set_user_notification_level.rb +18 -19
- data/examples/groups.rb +7 -7
- data/examples/invite_users.rb +5 -5
- data/examples/manage_api_keys.rb +6 -11
- data/examples/notifications.rb +6 -6
- data/examples/polls.rb +12 -12
- data/examples/post_action.rb +5 -5
- data/examples/search.rb +5 -5
- data/examples/sent_private_messages.rb +6 -6
- data/examples/sso.rb +6 -6
- data/examples/topic_lists.rb +5 -5
- data/examples/update_user.rb +15 -7
- data/examples/upload_file.rb +7 -7
- data/lib/discourse_api/api/api_key.rb +1 -3
- data/lib/discourse_api/api/backups.rb +1 -1
- data/lib/discourse_api/api/badges.rb +21 -6
- data/lib/discourse_api/api/categories.rb +69 -37
- data/lib/discourse_api/api/dashboard.rb +2 -6
- data/lib/discourse_api/api/groups.rb +68 -73
- data/lib/discourse_api/api/invite.rb +30 -30
- data/lib/discourse_api/api/notifications.rb +2 -3
- data/lib/discourse_api/api/params.rb +4 -14
- data/lib/discourse_api/api/polls.rb +9 -12
- data/lib/discourse_api/api/posts.rb +5 -8
- data/lib/discourse_api/api/private_messages.rb +9 -8
- data/lib/discourse_api/api/search.rb +2 -2
- data/lib/discourse_api/api/topics.rb +20 -22
- data/lib/discourse_api/api/uploads.rb +7 -5
- data/lib/discourse_api/api/user_actions.rb +2 -2
- data/lib/discourse_api/api/users.rb +31 -23
- data/lib/discourse_api/client.rb +58 -56
- data/lib/discourse_api/example_helper.rb +2 -4
- data/lib/discourse_api/single_sign_on.rb +53 -57
- data/lib/discourse_api/version.rb +1 -1
- data/spec/discourse_api/api/api_key_spec.rb +39 -25
- data/spec/discourse_api/api/backups_spec.rb +8 -3
- data/spec/discourse_api/api/badges_spec.rb +17 -7
- data/spec/discourse_api/api/categories_spec.rb +95 -53
- data/spec/discourse_api/api/email_spec.rb +17 -7
- data/spec/discourse_api/api/groups_spec.rb +71 -52
- data/spec/discourse_api/api/invite_spec.rb +41 -21
- data/spec/discourse_api/api/notifications_spec.rb +8 -4
- data/spec/discourse_api/api/params_spec.rb +5 -3
- data/spec/discourse_api/api/polls_spec.rb +53 -44
- data/spec/discourse_api/api/posts_spec.rb +33 -16
- data/spec/discourse_api/api/private_messages_spec.rb +25 -12
- data/spec/discourse_api/api/search_spec.rb +8 -3
- data/spec/discourse_api/api/site_settings_spec.rb +2 -3
- data/spec/discourse_api/api/sso_spec.rb +29 -25
- data/spec/discourse_api/api/topics_spec.rb +100 -31
- data/spec/discourse_api/api/uploads_spec.rb +16 -7
- data/spec/discourse_api/api/user_actions_spec.rb +13 -3
- data/spec/discourse_api/api/users_spec.rb +137 -55
- data/spec/discourse_api/client_spec.rb +32 -32
- data/spec/discourse_api/single_sign_on_spec.rb +15 -15
- data/spec/fixtures/categories.json +1 -1
- data/spec/spec_helper.rb +10 -15
- metadata +55 -12
@@ -1,12 +1,17 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require
|
2
|
+
require "spec_helper"
|
3
3
|
|
4
4
|
describe DiscourseApi::API::Invite do
|
5
5
|
subject { DiscourseApi::Client.new("#{host}", "test_d7fd0429940", "test_user") }
|
6
6
|
|
7
7
|
describe "#invite_user" do
|
8
8
|
before do
|
9
|
-
stub_post("#{host}/invites").to_return(
|
9
|
+
stub_post("#{host}/invites").to_return(
|
10
|
+
body: fixture("topic_invite_user.json"),
|
11
|
+
headers: {
|
12
|
+
content_type: "application/json",
|
13
|
+
},
|
14
|
+
)
|
10
15
|
end
|
11
16
|
|
12
17
|
it "requests the correct resource" do
|
@@ -17,13 +22,18 @@ describe DiscourseApi::API::Invite do
|
|
17
22
|
it "returns success" do
|
18
23
|
response = subject.invite_user(email: "fake_user@example.com", group_ids: "41,42")
|
19
24
|
expect(response).to be_a Hash
|
20
|
-
expect(response[
|
25
|
+
expect(response["success"]).to be_truthy
|
21
26
|
end
|
22
27
|
end
|
23
28
|
|
24
29
|
describe "#update_invite" do
|
25
30
|
before do
|
26
|
-
stub_put("#{host}/invites/27").to_return(
|
31
|
+
stub_put("#{host}/invites/27").to_return(
|
32
|
+
body: fixture("topic_invite_user.json"),
|
33
|
+
headers: {
|
34
|
+
content_type: "application/json",
|
35
|
+
},
|
36
|
+
)
|
27
37
|
end
|
28
38
|
|
29
39
|
it "updates invite" do
|
@@ -34,7 +44,12 @@ describe DiscourseApi::API::Invite do
|
|
34
44
|
|
35
45
|
describe "#retrieve_invite" do
|
36
46
|
before do
|
37
|
-
stub_get("#{host}/invites/retrieve.json?email=foo@bar.com").to_return(
|
47
|
+
stub_get("#{host}/invites/retrieve.json?email=foo@bar.com").to_return(
|
48
|
+
body: fixture("retrieve_invite.json"),
|
49
|
+
headers: {
|
50
|
+
content_type: "application/json",
|
51
|
+
},
|
52
|
+
)
|
38
53
|
end
|
39
54
|
|
40
55
|
it "requests the correct resource" do
|
@@ -58,11 +73,12 @@ describe DiscourseApi::API::Invite do
|
|
58
73
|
let(:url) { "#{host}/invites/destroy-all-expired" }
|
59
74
|
|
60
75
|
before do
|
61
|
-
stub_post(url)
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
76
|
+
stub_post(url).to_return(
|
77
|
+
body: '{"success": "OK"}',
|
78
|
+
headers: {
|
79
|
+
content_type: "application/json",
|
80
|
+
},
|
81
|
+
)
|
66
82
|
end
|
67
83
|
|
68
84
|
it "destroys all expired invites" do
|
@@ -75,11 +91,12 @@ describe DiscourseApi::API::Invite do
|
|
75
91
|
let(:url) { "#{host}/invites/reinvite-all" }
|
76
92
|
|
77
93
|
before do
|
78
|
-
stub_post(url)
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
94
|
+
stub_post(url).to_return(
|
95
|
+
body: '{"success": "OK"}',
|
96
|
+
headers: {
|
97
|
+
content_type: "application/json",
|
98
|
+
},
|
99
|
+
)
|
83
100
|
end
|
84
101
|
|
85
102
|
it "resends all invites" do
|
@@ -92,11 +109,12 @@ describe DiscourseApi::API::Invite do
|
|
92
109
|
let(:url) { "#{host}/invites/reinvite" }
|
93
110
|
|
94
111
|
before do
|
95
|
-
stub_post(url)
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
112
|
+
stub_post(url).to_return(
|
113
|
+
body: '{"success": "OK"}',
|
114
|
+
headers: {
|
115
|
+
content_type: "application/json",
|
116
|
+
},
|
117
|
+
)
|
100
118
|
end
|
101
119
|
|
102
120
|
it "resends invite" do
|
@@ -111,7 +129,9 @@ describe DiscourseApi::API::Invite do
|
|
111
129
|
before do
|
112
130
|
stub_delete(url).to_return(
|
113
131
|
body: '{"success": "OK"}',
|
114
|
-
headers: {
|
132
|
+
headers: {
|
133
|
+
content_type: "application/json",
|
134
|
+
},
|
115
135
|
)
|
116
136
|
end
|
117
137
|
|
@@ -1,13 +1,17 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require
|
2
|
+
require "spec_helper"
|
3
3
|
|
4
4
|
describe DiscourseApi::API::Notifications do
|
5
5
|
subject { DiscourseApi::Client.new("#{host}", "test_d7fd0429940", "test_user") }
|
6
6
|
|
7
7
|
describe "#notifications" do
|
8
|
-
|
9
8
|
before do
|
10
|
-
stub_get("#{host}/notifications.json").to_return(
|
9
|
+
stub_get("#{host}/notifications.json").to_return(
|
10
|
+
body: fixture("notifications.json"),
|
11
|
+
headers: {
|
12
|
+
content_type: "application/json",
|
13
|
+
},
|
14
|
+
)
|
11
15
|
end
|
12
16
|
|
13
17
|
it "requests the correct resource" do
|
@@ -19,7 +23,7 @@ describe DiscourseApi::API::Notifications do
|
|
19
23
|
notifications = subject.notifications
|
20
24
|
expect(notifications).to be_an Array
|
21
25
|
expect(notifications.first).to be_an Hash
|
22
|
-
expect(notifications[0][
|
26
|
+
expect(notifications[0]["notification_type"]).to eq(9)
|
23
27
|
end
|
24
28
|
end
|
25
29
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require
|
2
|
+
require "spec_helper"
|
3
3
|
|
4
4
|
describe DiscourseApi::API::Params do
|
5
5
|
def params_for(h)
|
@@ -31,7 +31,9 @@ describe DiscourseApi::API::Params do
|
|
31
31
|
end
|
32
32
|
|
33
33
|
it "should include optional and default params when defined and provided" do
|
34
|
-
expect(params_for({ r1: "test", o1: "optional", d1: "override" }).to_h).to include(
|
34
|
+
expect(params_for({ r1: "test", o1: "optional", d1: "override" }).to_h).to include(
|
35
|
+
o1: "optional",
|
36
|
+
d1: "override",
|
37
|
+
)
|
35
38
|
end
|
36
|
-
|
37
39
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require
|
2
|
+
require "spec_helper"
|
3
3
|
|
4
4
|
describe DiscourseApi::API::Polls do
|
5
5
|
subject { DiscourseApi::Client.new("#{host}", "test_d7fd0429940", "test_user") }
|
@@ -7,65 +7,74 @@ describe DiscourseApi::API::Polls do
|
|
7
7
|
describe "#poll vote" do
|
8
8
|
before do
|
9
9
|
path = "#{host}/polls/vote"
|
10
|
-
stub_put(path)
|
11
|
-
|
12
|
-
|
10
|
+
stub_put(path).to_return(
|
11
|
+
body: fixture("polls_vote.json"),
|
12
|
+
headers: {
|
13
|
+
content_type: "application/json",
|
14
|
+
},
|
15
|
+
)
|
13
16
|
end
|
14
17
|
|
15
18
|
it "requests the correct resource" do
|
16
|
-
options = [
|
17
|
-
subject.poll_vote post_id: 5, poll_name:
|
19
|
+
options = ["8b4736b1ae3dfb5a28088530f036f9e5"]
|
20
|
+
subject.poll_vote post_id: 5, poll_name: "poll", options: options
|
18
21
|
expect(a_put("#{host}/polls/vote")).to have_been_made
|
19
22
|
end
|
20
23
|
|
21
24
|
it "returns the expected votes" do
|
22
|
-
options = [
|
23
|
-
vote = subject.poll_vote post_id: 5, poll_name:
|
25
|
+
options = ["8b4736b1ae3dfb5a28088530f036f9e5"]
|
26
|
+
vote = subject.poll_vote post_id: 5, poll_name: "poll", options: options
|
24
27
|
expect(vote.body).to be_a Hash
|
25
|
-
expect(vote.body[
|
26
|
-
expect(vote.body[
|
28
|
+
expect(vote.body["poll"]["options"]).to be_an Array
|
29
|
+
expect(vote.body["vote"]).to eq(["8b4736b1ae3dfb5a28088530f036f9e5"])
|
27
30
|
end
|
28
31
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
32
|
+
describe "#poll toggle_status" do
|
33
|
+
before do
|
34
|
+
path = "#{host}/polls/toggle_status"
|
35
|
+
stub_put(path).to_return(
|
36
|
+
body: fixture("polls_toggle_status.json"),
|
37
|
+
headers: {
|
38
|
+
content_type: "application/json",
|
39
|
+
},
|
40
|
+
)
|
41
|
+
end
|
34
42
|
|
35
|
-
|
43
|
+
it "toggles the poll status to closed" do
|
44
|
+
subject.toggle_poll_status post_id: 5, poll_name: "poll", status: "closed"
|
45
|
+
expect(a_put("#{host}/polls/toggle_status")).to have_been_made
|
46
|
+
end
|
36
47
|
|
37
|
-
|
38
|
-
|
39
|
-
|
48
|
+
it "returns the expected results of closed poll" do
|
49
|
+
returned_poll_status =
|
50
|
+
subject.toggle_poll_status post_id: 5, poll_name: "poll", status: "closed"
|
51
|
+
expect(returned_poll_status.body).to be_a Hash
|
52
|
+
returned_poll_status.body["poll"]["options"].each { |g| expect(g).to be_a Hash }
|
53
|
+
end
|
40
54
|
end
|
41
55
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
before do
|
52
|
-
stub_get("#{host}/polls/voters.json?post_id=5&poll_name=poll")
|
53
|
-
.to_return(body: fixture("polls_voters.json"), headers: { content_type: "application/json" })
|
54
|
-
end
|
56
|
+
describe "#poll voters" do
|
57
|
+
before do
|
58
|
+
stub_get("#{host}/polls/voters.json?post_id=5&poll_name=poll").to_return(
|
59
|
+
body: fixture("polls_voters.json"),
|
60
|
+
headers: {
|
61
|
+
content_type: "application/json",
|
62
|
+
},
|
63
|
+
)
|
64
|
+
end
|
55
65
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
66
|
+
it "requests the correct resource" do
|
67
|
+
subject.poll_voters post_id: 5, poll_name: "poll"
|
68
|
+
expect(a_get("#{host}/polls/voters.json?post_id=5&poll_name=poll")).to have_been_made
|
69
|
+
end
|
60
70
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
71
|
+
it "returns the expected votes" do
|
72
|
+
voters = subject.poll_voters post_id: 5, poll_name: "poll"
|
73
|
+
expect(voters).to be_a Hash
|
74
|
+
voters.each { |g| expect(g).to be_an Array }
|
75
|
+
expect(voters["voters"]["e539a9df8700d0d05c69356a07b768cf"]).to be_an Array
|
76
|
+
expect(voters["voters"]["e539a9df8700d0d05c69356a07b768cf"][0]["id"]).to eq(356)
|
77
|
+
end
|
67
78
|
end
|
68
79
|
end
|
69
|
-
|
70
|
-
end
|
71
80
|
end
|
@@ -1,44 +1,59 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require
|
2
|
+
require "spec_helper"
|
3
3
|
|
4
4
|
describe DiscourseApi::API::Posts do
|
5
|
-
let (:client) {
|
5
|
+
let (:client) {
|
6
|
+
DiscourseApi::Client.new("#{host}", "test_d7fd0429940", "test_user")
|
7
|
+
}
|
6
8
|
|
7
9
|
describe "#get_post" do
|
8
10
|
before do
|
9
|
-
stub_get("#{host}/posts/11.json").to_return(
|
11
|
+
stub_get("#{host}/posts/11.json").to_return(
|
12
|
+
body: fixture("post.json"),
|
13
|
+
headers: {
|
14
|
+
content_type: "application/json",
|
15
|
+
},
|
16
|
+
)
|
10
17
|
end
|
11
18
|
|
12
19
|
it "fetches a post" do
|
13
20
|
the_post = client.get_post(11)
|
14
21
|
expect(the_post).to be_a Hash
|
15
|
-
expect(the_post[
|
22
|
+
expect(the_post["id"]).to eq(11)
|
16
23
|
end
|
17
24
|
end
|
18
25
|
|
19
26
|
describe "#posts" do
|
20
27
|
before do
|
21
|
-
stub_get("#{host}/posts.json?before=0").to_return(
|
22
|
-
|
28
|
+
stub_get("#{host}/posts.json?before=0").to_return(
|
29
|
+
body: fixture("posts_latest.json"),
|
30
|
+
headers: {
|
31
|
+
content_type: "application/json",
|
32
|
+
},
|
33
|
+
)
|
34
|
+
stub_get("#{host}/posts.json?before=14").to_return(
|
35
|
+
body: fixture("posts_before.json"),
|
36
|
+
headers: {
|
37
|
+
content_type: "application/json",
|
38
|
+
},
|
39
|
+
)
|
23
40
|
end
|
24
41
|
|
25
42
|
it "fetches latest posts" do
|
26
43
|
the_posts = client.posts()
|
27
44
|
expect(the_posts).to be_a Hash
|
28
|
-
expect(the_posts[
|
45
|
+
expect(the_posts["latest_posts"][0]["id"]).to eq(15)
|
29
46
|
end
|
30
47
|
|
31
48
|
it "fetches posts before 14" do
|
32
49
|
the_posts = client.posts(before: 14)
|
33
50
|
expect(the_posts).to be_a Hash
|
34
|
-
expect(the_posts[
|
51
|
+
expect(the_posts["latest_posts"][0]["id"]).to eq(14)
|
35
52
|
end
|
36
53
|
end
|
37
54
|
|
38
55
|
describe "#wikify_post" do
|
39
|
-
before
|
40
|
-
stub_put("#{host}/posts/9999/wiki")
|
41
|
-
end
|
56
|
+
before { stub_put("#{host}/posts/9999/wiki") }
|
42
57
|
|
43
58
|
it "fails on unknown post" do
|
44
59
|
client.wikify_post(9999)
|
@@ -47,9 +62,7 @@ describe DiscourseApi::API::Posts do
|
|
47
62
|
end
|
48
63
|
|
49
64
|
describe "#delete_post" do
|
50
|
-
before
|
51
|
-
stub_delete("#{host}/posts/9999.json")
|
52
|
-
end
|
65
|
+
before { stub_delete("#{host}/posts/9999.json") }
|
53
66
|
|
54
67
|
it "deletes a post" do
|
55
68
|
client.delete_post(9999)
|
@@ -59,7 +72,12 @@ describe DiscourseApi::API::Posts do
|
|
59
72
|
|
60
73
|
describe "#post_action_users" do
|
61
74
|
before do
|
62
|
-
stub_get("#{host}/post_action_users.json?id=11&post_action_type_id=2").to_return(
|
75
|
+
stub_get("#{host}/post_action_users.json?id=11&post_action_type_id=2").to_return(
|
76
|
+
body: fixture("post_action_users.json"),
|
77
|
+
headers: {
|
78
|
+
content_type: "application/json",
|
79
|
+
},
|
80
|
+
)
|
63
81
|
end
|
64
82
|
|
65
83
|
it "fetches post_action_users" do
|
@@ -68,5 +86,4 @@ describe DiscourseApi::API::Posts do
|
|
68
86
|
expect(post_action_users["post_action_users"][0]["id"]).to eq(1286)
|
69
87
|
end
|
70
88
|
end
|
71
|
-
|
72
89
|
end
|
@@ -1,55 +1,68 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require
|
2
|
+
require "spec_helper"
|
3
3
|
|
4
4
|
describe DiscourseApi::API::PrivateMessages do
|
5
5
|
subject { DiscourseApi::Client.new("#{host}", "test_d7fd0429940", "test_user") }
|
6
6
|
|
7
7
|
describe "#private_messages" do
|
8
8
|
before do
|
9
|
-
stub_get("#{host}/topics/private-messages/test_user.json").to_return(
|
9
|
+
stub_get("#{host}/topics/private-messages/test_user.json").to_return(
|
10
|
+
body: fixture("private_messages.json"),
|
11
|
+
headers: {
|
12
|
+
content_type: "application/json",
|
13
|
+
},
|
14
|
+
)
|
10
15
|
end
|
11
16
|
|
12
17
|
it "requests the correct resource" do
|
13
|
-
subject.private_messages(
|
18
|
+
subject.private_messages("test_user")
|
14
19
|
expect(a_get("#{host}/topics/private-messages/test_user.json")).to have_been_made
|
15
20
|
end
|
16
21
|
|
17
22
|
it "returns the requested private messages" do
|
18
|
-
private_messages = subject.private_messages(
|
23
|
+
private_messages = subject.private_messages("test_user")
|
19
24
|
expect(private_messages).to be_an Array
|
20
25
|
end
|
21
26
|
end
|
22
27
|
|
23
28
|
describe "#sent_private_messages" do
|
24
29
|
before do
|
25
|
-
stub_get("#{host}/topics/private-messages-sent/test_user.json").to_return(
|
30
|
+
stub_get("#{host}/topics/private-messages-sent/test_user.json").to_return(
|
31
|
+
body: fixture("private_messages.json"),
|
32
|
+
headers: {
|
33
|
+
content_type: "application/json",
|
34
|
+
},
|
35
|
+
)
|
26
36
|
end
|
27
37
|
|
28
38
|
it "requests the correct resource" do
|
29
|
-
subject.sent_private_messages(
|
39
|
+
subject.sent_private_messages("test_user")
|
30
40
|
expect(a_get("#{host}/topics/private-messages-sent/test_user.json")).to have_been_made
|
31
41
|
end
|
32
42
|
|
33
43
|
it "returns the requested sent private messages" do
|
34
|
-
private_messages = subject.sent_private_messages(
|
44
|
+
private_messages = subject.sent_private_messages("test_user")
|
35
45
|
expect(private_messages).to be_an Array
|
36
46
|
end
|
37
47
|
end
|
38
48
|
|
39
|
-
describe
|
49
|
+
describe "#create_pm" do
|
40
50
|
before do
|
41
51
|
stub_post("#{host}/posts")
|
42
52
|
subject.create_pm(
|
43
53
|
title: "Confidential: Hello World!",
|
44
54
|
raw: "This is the raw markdown for my private message",
|
45
|
-
target_recipients: "user1,user2"
|
55
|
+
target_recipients: "user1,user2",
|
46
56
|
)
|
47
57
|
end
|
48
58
|
|
49
59
|
it "makes a create private message request" do
|
50
|
-
expect(
|
51
|
-
|
52
|
-
|
60
|
+
expect(
|
61
|
+
a_post("#{host}/posts").with(
|
62
|
+
body:
|
63
|
+
"archetype=private_message&raw=This+is+the+raw+markdown+for+my+private+message&target_recipients=user1%2Cuser2&title=Confidential%3A+Hello+World%21",
|
64
|
+
),
|
65
|
+
).to have_been_made
|
53
66
|
end
|
54
67
|
end
|
55
68
|
end
|
@@ -1,12 +1,17 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require
|
2
|
+
require "spec_helper"
|
3
3
|
|
4
4
|
describe DiscourseApi::API::Search do
|
5
5
|
subject { DiscourseApi::Client.new("#{host}", "test_d7fd0429940", "test_user") }
|
6
6
|
|
7
7
|
describe "#search" do
|
8
8
|
before do
|
9
|
-
stub_get("#{host}/search").with(query: { q: "test" }).to_return(
|
9
|
+
stub_get("#{host}/search").with(query: { q: "test" }).to_return(
|
10
|
+
body: fixture("search.json"),
|
11
|
+
headers: {
|
12
|
+
content_type: "application/json",
|
13
|
+
},
|
14
|
+
)
|
10
15
|
end
|
11
16
|
|
12
17
|
it "requests the correct resource" do
|
@@ -25,7 +30,7 @@ describe DiscourseApi::API::Search do
|
|
25
30
|
end
|
26
31
|
|
27
32
|
it "raises an ArgumentError for empty string" do
|
28
|
-
expect { subject.search(
|
33
|
+
expect { subject.search("") }.to raise_error(ArgumentError)
|
29
34
|
end
|
30
35
|
end
|
31
36
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require
|
2
|
+
require "spec_helper"
|
3
3
|
|
4
4
|
describe DiscourseApi::API::SiteSettings do
|
5
5
|
subject { DiscourseApi::Client.new("#{host}", "test_d7fd0429940", "test_user") }
|
@@ -11,8 +11,7 @@ describe DiscourseApi::API::SiteSettings do
|
|
11
11
|
end
|
12
12
|
|
13
13
|
it "makes a site_settings_update request" do
|
14
|
-
expect(a_put("#{host}/admin/site_settings/foo")
|
15
|
-
.with(body: "foo=bar")).to have_been_made
|
14
|
+
expect(a_put("#{host}/admin/site_settings/foo").with(body: "foo=bar")).to have_been_made
|
16
15
|
end
|
17
16
|
end
|
18
17
|
end
|
@@ -1,36 +1,36 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require
|
2
|
+
require "spec_helper"
|
3
3
|
|
4
4
|
describe DiscourseApi::API::SSO do
|
5
5
|
subject { DiscourseApi::Client.new("#{host}", "test_d7fd0429940", "test_user") }
|
6
6
|
|
7
7
|
let(:params) do
|
8
8
|
{
|
9
|
-
sso_secret
|
10
|
-
sso_url
|
11
|
-
name
|
12
|
-
username
|
13
|
-
email
|
14
|
-
external_id
|
15
|
-
suppress_welcome_message
|
16
|
-
avatar_url
|
17
|
-
title
|
18
|
-
avatar_force_update
|
19
|
-
add_groups
|
20
|
-
remove_groups
|
9
|
+
:sso_secret => "abc",
|
10
|
+
:sso_url => "www.google.com",
|
11
|
+
:name => "Some User",
|
12
|
+
:username => "some_user",
|
13
|
+
:email => "some@email.com",
|
14
|
+
:external_id => "abc",
|
15
|
+
:suppress_welcome_message => false,
|
16
|
+
:avatar_url => "https://www.website.com",
|
17
|
+
:title => "ruby",
|
18
|
+
:avatar_force_update => false,
|
19
|
+
:add_groups => %w[a b],
|
20
|
+
:remove_groups => %w[c d],
|
21
21
|
# old format (which results in custom.custom.field_1 in unsigned_payload)
|
22
|
-
|
22
|
+
"custom.field_1" => "tomato",
|
23
23
|
# new format
|
24
|
-
custom_fields
|
25
|
-
field_2:
|
26
|
-
}
|
24
|
+
:custom_fields => {
|
25
|
+
field_2: "potato",
|
26
|
+
},
|
27
27
|
}
|
28
28
|
end
|
29
29
|
let(:expected_unsigned_payload) do
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
30
|
+
"add_groups=a&add_groups=b&avatar_url=https%3A%2F%2Fwww.website.com" \
|
31
|
+
"&email=some%40email.com&external_id=abc&name=Some+User&remove_groups=c" \
|
32
|
+
"&remove_groups=d&title=ruby&username=some_user&custom.field_2=potato" \
|
33
|
+
"&custom.custom.field_1=tomato"
|
34
34
|
end
|
35
35
|
let(:sso_double) { DiscourseApi::SingleSignOn.parse_hash(params) }
|
36
36
|
|
@@ -38,21 +38,25 @@ describe DiscourseApi::API::SSO do
|
|
38
38
|
before do
|
39
39
|
stub_post(/.*sync_sso.*/).to_return(
|
40
40
|
body: fixture("user.json"),
|
41
|
-
headers: {
|
41
|
+
headers: {
|
42
|
+
content_type: "application/json",
|
43
|
+
},
|
42
44
|
)
|
43
45
|
end
|
44
46
|
|
45
|
-
it
|
47
|
+
it "assigns params to sso instance" do
|
46
48
|
allow(DiscourseApi::SingleSignOn).to(receive(:parse_hash).with(params).and_return(sso_double))
|
47
49
|
|
48
50
|
subject.sync_sso(params)
|
49
51
|
|
50
|
-
expect(sso_double.custom_fields).to eql(
|
52
|
+
expect(sso_double.custom_fields).to eql(
|
53
|
+
{ "custom.field_1" => "tomato", :field_2 => "potato" },
|
54
|
+
)
|
51
55
|
expect(sso_double.unsigned_payload).to eql(expected_unsigned_payload)
|
52
56
|
end
|
53
57
|
|
54
58
|
it "requests the correct resource" do
|
55
|
-
subject.sync_sso({ sso_secret
|
59
|
+
subject.sync_sso({ :sso_secret => "test_d7fd0429940", "custom.riffle_url" => "test" })
|
56
60
|
expect(a_post(/.*sync_sso.*/)).to have_been_made
|
57
61
|
end
|
58
62
|
end
|