From 1bf4bfb39e1542ddbd396596087785be3190c8f0 Mon Sep 17 00:00:00 2001 From: Paige Davenport Date: Tue, 10 Sep 2019 13:56:34 -0700 Subject: [PATCH 01/32] Added recipient test. --- lib/recipient.rb | 1 + lib/slack.rb | 4 ++-- test/recipient_test.rb | 18 ++++++++++++++++++ test/test_helper.rb | 2 ++ 4 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 lib/recipient.rb create mode 100644 test/recipient_test.rb diff --git a/lib/recipient.rb b/lib/recipient.rb new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/lib/recipient.rb @@ -0,0 +1 @@ + diff --git a/lib/slack.rb b/lib/slack.rb index 960cf2f7..69ef8357 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -5,7 +5,7 @@ def main # TODO project - puts "Thank you for using the Ada Slack CLI" + puts "Tharnk you for using the Ada Slack CLI" end -main if __FILE__ == $PROGRAM_NAME \ No newline at end of file +main if __FILE__ == $PROGRAM_NAME diff --git a/test/recipient_test.rb b/test/recipient_test.rb new file mode 100644 index 00000000..6447d93e --- /dev/null +++ b/test/recipient_test.rb @@ -0,0 +1,18 @@ +require_relative 'test_helper' + +describe "Recipient" do + describe "initialize" do + it "can be initialized with an ID and a name" do + slack_id = "TD83838H" + name = "SlackBot" + + new_recipient = SlackCLI::Recipient.new(slack_id, name) + + expect(new_recipient).must_be_instance_of SlackCLI::Recipient + end + + + + end + +end diff --git a/test/test_helper.rb b/test/test_helper.rb index 90aeb408..71c8070f 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -11,6 +11,8 @@ Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new +require_relative '../lib/recipient.rb' + VCR.configure do |config| config.cassette_library_dir = "test/cassettes" config.hook_into :webmock From c7d314f778b7dc88ce311aef74533a0268b62a67 Mon Sep 17 00:00:00 2001 From: geli-gel Date: Tue, 10 Sep 2019 14:16:50 -0700 Subject: [PATCH 02/32] updated Recipient and its test --- lib/recipient.rb | 10 ++++++++++ test/recipient_test.rb | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/recipient.rb b/lib/recipient.rb index 8b137891..2b826c75 100644 --- a/lib/recipient.rb +++ b/lib/recipient.rb @@ -1 +1,11 @@ +module SlackCLI + class Recipient + attr_reader :slack_id, :name + def initialize(slack_id:, name:) + @slack_id = slack_id + @name = name + end + + end +end diff --git a/test/recipient_test.rb b/test/recipient_test.rb index 6447d93e..d3d0f741 100644 --- a/test/recipient_test.rb +++ b/test/recipient_test.rb @@ -6,7 +6,7 @@ slack_id = "TD83838H" name = "SlackBot" - new_recipient = SlackCLI::Recipient.new(slack_id, name) + new_recipient = SlackCLI::Recipient.new(slack_id: slack_id, name: name) expect(new_recipient).must_be_instance_of SlackCLI::Recipient end From 2be71695913f7dac6068b327b6581b2955cbbaef Mon Sep 17 00:00:00 2001 From: geli-gel Date: Tue, 10 Sep 2019 14:17:45 -0700 Subject: [PATCH 03/32] added file for User and test --- lib/user.rb | 11 +++++++++++ test/test_helper.rb | 2 ++ test/user_test.rb | 19 +++++++++++++++++++ 3 files changed, 32 insertions(+) create mode 100644 lib/user.rb create mode 100644 test/user_test.rb diff --git a/lib/user.rb b/lib/user.rb new file mode 100644 index 00000000..a73d1b06 --- /dev/null +++ b/lib/user.rb @@ -0,0 +1,11 @@ +module SlackCLI + class User + # attr_reader :slack_id, :name + + # def initialize(slack_id:, name:) + # @slack_id = slack_id + # @name = name + # end + + end +end diff --git a/test/test_helper.rb b/test/test_helper.rb index 71c8070f..34ba8e3d 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -12,6 +12,8 @@ Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new require_relative '../lib/recipient.rb' +require_relative '../lib/user.rb' + VCR.configure do |config| config.cassette_library_dir = "test/cassettes" diff --git a/test/user_test.rb b/test/user_test.rb new file mode 100644 index 00000000..d6430806 --- /dev/null +++ b/test/user_test.rb @@ -0,0 +1,19 @@ +require_relative 'test_helper' + +describe "User" do + describe "initialize" do + it "can be initialized as child class of Recipient" do + slack_id = "TD83838H" + name = "SlackBot" + real_name = "Mr. Slack Bot" + + new_recipient = SlackCLI::User.new(slack_id: slack_id, name: name, real_name: real_name) + + expect(new_recipient.superclass).must_equal SlackCLI::Recipient + end + + + + end + +end From 3aedac13f3ee6937f5d0bbed44181ca095f697f2 Mon Sep 17 00:00:00 2001 From: Paige Davenport Date: Tue, 10 Sep 2019 14:50:38 -0700 Subject: [PATCH 04/32] Added remaining classes and initialize tests. --- lib/channel.rb | 12 ++++++++++++ lib/user.rb | 12 ++++++------ lib/workspace.rb | 12 ++++++++++++ test/channel_test.rb | 26 ++++++++++++++++++++++++++ test/test_helper.rb | 3 ++- test/user_test.rb | 8 ++++++-- test/workspace_test.rb | 14 ++++++++++++++ 7 files changed, 78 insertions(+), 9 deletions(-) create mode 100644 lib/channel.rb create mode 100644 lib/workspace.rb create mode 100644 test/channel_test.rb create mode 100644 test/workspace_test.rb diff --git a/lib/channel.rb b/lib/channel.rb new file mode 100644 index 00000000..482dd27c --- /dev/null +++ b/lib/channel.rb @@ -0,0 +1,12 @@ +module SlackCLI + class Channel < Recipient + attr_reader :topic, :member_count + + def initialize(slack_id:, name:, topic:, member_count:) + super(slack_id: slack_id, name: name) + @topic = topic + @member_count = member_count + end + + end +end diff --git a/lib/user.rb b/lib/user.rb index a73d1b06..7e356064 100644 --- a/lib/user.rb +++ b/lib/user.rb @@ -1,11 +1,11 @@ module SlackCLI - class User - # attr_reader :slack_id, :name + class User < Recipient + attr_reader :real_name - # def initialize(slack_id:, name:) - # @slack_id = slack_id - # @name = name - # end + def initialize(slack_id:, name:, real_name:) + super(slack_id: slack_id, name: name) + @real_name = real_name + end end end diff --git a/lib/workspace.rb b/lib/workspace.rb new file mode 100644 index 00000000..e52f898e --- /dev/null +++ b/lib/workspace.rb @@ -0,0 +1,12 @@ +module SlackCLI + class Workspace + attr_reader :users, :channels + attr_accessor :selected + + def initialize + @users = [] + @channels = [] + @selected = nil + end + end +end diff --git a/test/channel_test.rb b/test/channel_test.rb new file mode 100644 index 00000000..682fc0b4 --- /dev/null +++ b/test/channel_test.rb @@ -0,0 +1,26 @@ +require_relative 'test_helper' + +describe "Channel" do + describe "initialize" do + it "can be initialized as child class of Recipient" do + slack_id = "TD83838H" + name = "#random" + topic = "random thoughts" + member_count = "4" + + + new_channel = SlackCLI::Channel.new( + slack_id: slack_id, + name: name, + topic: topic, + member_count: member_count + ) + + expect(new_channel.class < SlackCLI::Recipient).must_equal true + end + + + + end + +end diff --git a/test/test_helper.rb b/test/test_helper.rb index 34ba8e3d..e4c62dd1 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -13,7 +13,8 @@ require_relative '../lib/recipient.rb' require_relative '../lib/user.rb' - +require_relative '../lib/channel.rb' +require_relative '../lib/workspace.rb' VCR.configure do |config| config.cassette_library_dir = "test/cassettes" diff --git a/test/user_test.rb b/test/user_test.rb index d6430806..443d9319 100644 --- a/test/user_test.rb +++ b/test/user_test.rb @@ -7,9 +7,13 @@ name = "SlackBot" real_name = "Mr. Slack Bot" - new_recipient = SlackCLI::User.new(slack_id: slack_id, name: name, real_name: real_name) + new_recipient = SlackCLI::User.new( + slack_id: slack_id, + name: name, + real_name: real_name + ) - expect(new_recipient.superclass).must_equal SlackCLI::Recipient + expect(new_recipient.class < SlackCLI::Recipient).must_equal true end diff --git a/test/workspace_test.rb b/test/workspace_test.rb new file mode 100644 index 00000000..73d85d60 --- /dev/null +++ b/test/workspace_test.rb @@ -0,0 +1,14 @@ +require_relative 'test_helper' + +describe "Workspace" do + describe "initialize" do + it "can initialize" do + new_workspace = SlackCLI::Workspace.new + + expect(new_workspace).must_be_instance_of SlackCLI::Workspace + end + end + + + +end From cc78eca1fc98b3173916a6b348fa7d7dac1d63ee Mon Sep 17 00:00:00 2001 From: geli-gel Date: Tue, 10 Sep 2019 15:42:36 -0700 Subject: [PATCH 05/32] created self.list in User and test --- .gitignore | 3 ++ lib/user.rb | 31 ++++++++++++++ test/cassettes/list_users.yml | 77 +++++++++++++++++++++++++++++++++++ test/user_test.rb | 11 ++++- 4 files changed, 121 insertions(+), 1 deletion(-) create mode 100644 test/cassettes/list_users.yml diff --git a/.gitignore b/.gitignore index 8d6a243f..db0e8058 100644 --- a/.gitignore +++ b/.gitignore @@ -54,3 +54,6 @@ build-iPhoneSimulator/ # Ignore cassette files /specs/cassettes/ + +# Ignore .DS_Store +.DS_Store diff --git a/lib/user.rb b/lib/user.rb index 7e356064..1740a161 100644 --- a/lib/user.rb +++ b/lib/user.rb @@ -1,3 +1,9 @@ +require 'httparty' +require 'awesome_print' +require 'dotenv' + +Dotenv.load + module SlackCLI class User < Recipient attr_reader :real_name @@ -6,6 +12,31 @@ def initialize(slack_id:, name:, real_name:) super(slack_id: slack_id, name: name) @real_name = real_name end + + def self.list + # Call the API to get users + url = "https://slack.com/api/users.list" + key = ENV["API_TOKEN"] + + query = { + token: key + } + + response = HTTParty.get(url, query: query) + + users = response["members"].map do |member| + # pull ID, Name, and Real Name + slack_id = member["id"] + name = member["name"] + real_name = member["real_name"] + + # for each user, inititialize User with those things + SlackCLI::User.new(slack_id: slack_id, name: name, real_name: real_name) + end + + return users + + end end end diff --git a/test/cassettes/list_users.yml b/test/cassettes/list_users.yml new file mode 100644 index 00000000..0fb97e9e --- /dev/null +++ b/test/cassettes/list_users.yml @@ -0,0 +1,77 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/users.list?token=xoxp-744084534355-757764004934-757426544519-ce0ad9ca69a14ee864a03c3f467f1059 + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '916' + Connection: + - keep-alive + Date: + - Tue, 10 Sep 2019 22:32:15 GMT + Server: + - Apache + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - cd544d0a-f7da-4a5c-afa4-e3d7f0250f0d + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write:bot + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - users:read + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-153o + X-Cache: + - Miss from cloudfront + Via: + - 1.1 42ef990e439ae115ff739f04e3945234.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C1 + X-Amz-Cf-Id: + - C_ESYo4_MBnpbZMnSb9OErumLL1hvomRecw-qRTpfYrevORIkGlMKQ== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"TMW2GFQAF","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":null,"tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Slackbot","real_name_normalized":"Slackbot","display_name":"Slackbot","display_name_normalized":"Slackbot","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"sv41d8cd98f0","always_active":true,"first_name":"slackbot","last_name":"","image_24":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png","image_32":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png","image_192":"https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png","image_512":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png","status_text_canonical":"","team":"TMW2GFQAF"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":0},{"id":"UN9C6R7EK","team_id":"TMW2GFQAF","name":"davenport.paige","deleted":false,"color":"4bbe2e","real_name":"Paige","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Paige","real_name_normalized":"Paige","display_name":"Paige","display_name_normalized":"Paige","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g68b577a7f23","image_24":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-512.png","status_text_canonical":"","team":"TMW2GFQAF"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568143450,"has_2fa":false},{"id":"UN9NG04TG","team_id":"TMW2GFQAF","name":"angele.zam","deleted":false,"color":"9f69e7","real_name":"angele.zam","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"angele.zam","real_name_normalized":"angele.zam","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gee46bbc96e3","image_24":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-512.png","status_text_canonical":"","team":"TMW2GFQAF"},"is_admin":true,"is_owner":true,"is_primary_owner":true,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568143383,"has_2fa":false}],"cache_ts":1568154735,"response_metadata":{"next_cursor":""}}' + http_version: + recorded_at: Tue, 10 Sep 2019 22:32:15 GMT +recorded_with: VCR 5.0.0 diff --git a/test/user_test.rb b/test/user_test.rb index 443d9319..7b3da493 100644 --- a/test/user_test.rb +++ b/test/user_test.rb @@ -5,7 +5,7 @@ it "can be initialized as child class of Recipient" do slack_id = "TD83838H" name = "SlackBot" - real_name = "Mr. Slack Bot" + real_name = "SlackBot" new_recipient = SlackCLI::User.new( slack_id: slack_id, @@ -15,8 +15,17 @@ expect(new_recipient.class < SlackCLI::Recipient).must_equal true end + end + describe "self.list" do + it "creates a list of at least 1 user" do + VCR.use_cassette("list_users") do + users_list = SlackCLI::User.list + expect(users_list).must_be_instance_of Array + expect(users_list.first).must_be_instance_of SlackCLI::User + end + end end From fede5514cdc88c0dd65d868add324b34f0dc2e3b Mon Sep 17 00:00:00 2001 From: geli-gel Date: Tue, 10 Sep 2019 16:09:50 -0700 Subject: [PATCH 06/32] added self.get to Recipient and refactored User self.list to use parent self.get --- lib/recipient.rb | 9 ++++++++- lib/user.rb | 22 +++++++--------------- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/lib/recipient.rb b/lib/recipient.rb index 2b826c75..c80548b9 100644 --- a/lib/recipient.rb +++ b/lib/recipient.rb @@ -1,3 +1,5 @@ +require 'httparty' + module SlackCLI class Recipient attr_reader :slack_id, :name @@ -6,6 +8,11 @@ def initialize(slack_id:, name:) @slack_id = slack_id @name = name end - + + def self.get(url) + key = ENV["API_TOKEN"] + response = HTTParty.get(url, query: {token: key }) + end + end end diff --git a/lib/user.rb b/lib/user.rb index 1740a161..f58dc2d5 100644 --- a/lib/user.rb +++ b/lib/user.rb @@ -14,28 +14,20 @@ def initialize(slack_id:, name:, real_name:) end def self.list - # Call the API to get users - url = "https://slack.com/api/users.list" - key = ENV["API_TOKEN"] - - query = { - token: key - } - - response = HTTParty.get(url, query: query) - + + response = self.get("https://slack.com/api/users.list") + users = response["members"].map do |member| - # pull ID, Name, and Real Name slack_id = member["id"] name = member["name"] real_name = member["real_name"] - # for each user, inititialize User with those things - SlackCLI::User.new(slack_id: slack_id, name: name, real_name: real_name) + SlackCLI::User.new(slack_id: slack_id, name: name, real_name: real_name + end - + return users - + end end From 0875424eaf4b414ed01602ab2d8fc33257a169ef Mon Sep 17 00:00:00 2001 From: Angele Zamarron Date: Tue, 10 Sep 2019 16:29:32 -0700 Subject: [PATCH 07/32] Delete list_users.yml --- test/cassettes/list_users.yml | 77 ----------------------------------- 1 file changed, 77 deletions(-) delete mode 100644 test/cassettes/list_users.yml diff --git a/test/cassettes/list_users.yml b/test/cassettes/list_users.yml deleted file mode 100644 index 0fb97e9e..00000000 --- a/test/cassettes/list_users.yml +++ /dev/null @@ -1,77 +0,0 @@ ---- -http_interactions: -- request: - method: get - uri: https://slack.com/api/users.list?token=xoxp-744084534355-757764004934-757426544519-ce0ad9ca69a14ee864a03c3f467f1059 - body: - encoding: US-ASCII - string: '' - headers: - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - "*/*" - User-Agent: - - Ruby - response: - status: - code: 200 - message: OK - headers: - Content-Type: - - application/json; charset=utf-8 - Content-Length: - - '916' - Connection: - - keep-alive - Date: - - Tue, 10 Sep 2019 22:32:15 GMT - Server: - - Apache - X-Content-Type-Options: - - nosniff - X-Slack-Req-Id: - - cd544d0a-f7da-4a5c-afa4-e3d7f0250f0d - X-Oauth-Scopes: - - identify,channels:read,users:read,chat:write:bot - Expires: - - Mon, 26 Jul 1997 05:00:00 GMT - Cache-Control: - - private, no-cache, no-store, must-revalidate - Access-Control-Expose-Headers: - - x-slack-req-id, retry-after - X-Xss-Protection: - - '0' - X-Accepted-Oauth-Scopes: - - users:read - Vary: - - Accept-Encoding - Pragma: - - no-cache - Access-Control-Allow-Headers: - - slack-route, x-slack-version-ts - Strict-Transport-Security: - - max-age=31536000; includeSubDomains; preload - Referrer-Policy: - - no-referrer - Access-Control-Allow-Origin: - - "*" - X-Via: - - haproxy-www-153o - X-Cache: - - Miss from cloudfront - Via: - - 1.1 42ef990e439ae115ff739f04e3945234.cloudfront.net (CloudFront) - X-Amz-Cf-Pop: - - SEA19-C1 - X-Amz-Cf-Id: - - C_ESYo4_MBnpbZMnSb9OErumLL1hvomRecw-qRTpfYrevORIkGlMKQ== - body: - encoding: ASCII-8BIT - string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"TMW2GFQAF","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":null,"tz_label":"Pacific - Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Slackbot","real_name_normalized":"Slackbot","display_name":"Slackbot","display_name_normalized":"Slackbot","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"sv41d8cd98f0","always_active":true,"first_name":"slackbot","last_name":"","image_24":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png","image_32":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png","image_192":"https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png","image_512":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png","status_text_canonical":"","team":"TMW2GFQAF"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":0},{"id":"UN9C6R7EK","team_id":"TMW2GFQAF","name":"davenport.paige","deleted":false,"color":"4bbe2e","real_name":"Paige","tz":"America\/Los_Angeles","tz_label":"Pacific - Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Paige","real_name_normalized":"Paige","display_name":"Paige","display_name_normalized":"Paige","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g68b577a7f23","image_24":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-512.png","status_text_canonical":"","team":"TMW2GFQAF"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568143450,"has_2fa":false},{"id":"UN9NG04TG","team_id":"TMW2GFQAF","name":"angele.zam","deleted":false,"color":"9f69e7","real_name":"angele.zam","tz":"America\/Los_Angeles","tz_label":"Pacific - Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"angele.zam","real_name_normalized":"angele.zam","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gee46bbc96e3","image_24":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-512.png","status_text_canonical":"","team":"TMW2GFQAF"},"is_admin":true,"is_owner":true,"is_primary_owner":true,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568143383,"has_2fa":false}],"cache_ts":1568154735,"response_metadata":{"next_cursor":""}}' - http_version: - recorded_at: Tue, 10 Sep 2019 22:32:15 GMT -recorded_with: VCR 5.0.0 From c89c942fd447d2debbf974954cdfd2c5567b8f46 Mon Sep 17 00:00:00 2001 From: Paige Davenport Date: Tue, 10 Sep 2019 16:43:53 -0700 Subject: [PATCH 08/32] Hid the API token and other small edits. --- lib/recipient.rb | 2 + lib/user.rb | 5 +- test/cassettes/list_channels.yml | 80 ++++++++++++++++++++++++++++++++ test/cassettes/list_users.yml | 18 +++---- test/test_helper.rb | 12 ++++- 5 files changed, 102 insertions(+), 15 deletions(-) create mode 100644 test/cassettes/list_channels.yml diff --git a/lib/recipient.rb b/lib/recipient.rb index c80548b9..da8a54c2 100644 --- a/lib/recipient.rb +++ b/lib/recipient.rb @@ -12,6 +12,8 @@ def initialize(slack_id:, name:) def self.get(url) key = ENV["API_TOKEN"] response = HTTParty.get(url, query: {token: key }) + + return response end end diff --git a/lib/user.rb b/lib/user.rb index f58dc2d5..64b26d3e 100644 --- a/lib/user.rb +++ b/lib/user.rb @@ -14,7 +14,6 @@ def initialize(slack_id:, name:, real_name:) end def self.list - response = self.get("https://slack.com/api/users.list") users = response["members"].map do |member| @@ -22,12 +21,10 @@ def self.list name = member["name"] real_name = member["real_name"] - SlackCLI::User.new(slack_id: slack_id, name: name, real_name: real_name - + SlackCLI::User.new(slack_id: slack_id, name: name, real_name: real_name) end return users - end end diff --git a/test/cassettes/list_channels.yml b/test/cassettes/list_channels.yml new file mode 100644 index 00000000..180e7287 --- /dev/null +++ b/test/cassettes/list_channels.yml @@ -0,0 +1,80 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/channels.list?token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '553' + Connection: + - keep-alive + Date: + - Tue, 10 Sep 2019 23:34:49 GMT + Server: + - Apache + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - 740b8d45-ce63-4813-9f28-d44bde1fad49 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write:bot + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - channels:read + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-ocf7 + X-Cache: + - Miss from cloudfront + Via: + - 1.1 10b37ec1ede3e33f11dd42b87558cd1f.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C1 + X-Amz-Cf-Id: + - ATzYvx-fNHHf9IpBfeRGplKIMSi371onlJI_Toix1utM5yRizhR7YQ== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channels":[{"id":"CMW2GGWN7","name":"slack-cli","is_channel":true,"created":1568143384,"is_archived":false,"is_general":false,"unlinked":0,"creator":"UN9NG04TG","name_normalized":"slack-cli","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UN9C6R7EK","UN9NG04TG"],"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"","creator":"","last_set":0},"previous_names":[],"num_members":2},{"id":"CN7G55J00","name":"general","is_channel":true,"created":1568143383,"is_archived":false,"is_general":true,"unlinked":0,"creator":"UN9NG04TG","name_normalized":"general","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UN9C6R7EK","UN9NG04TG"],"topic":{"value":"Company-wide + announcements and work-based matters","creator":"UN9NG04TG","last_set":1568143383},"purpose":{"value":"This + channel is for workspace-wide communication and announcements. All members + are in this channel.","creator":"UN9NG04TG","last_set":1568143383},"previous_names":[],"num_members":2},{"id":"CN9NG0YUE","name":"random","is_channel":true,"created":1568143383,"is_archived":false,"is_general":false,"unlinked":0,"creator":"UN9NG04TG","name_normalized":"random","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UN9C6R7EK","UN9NG04TG"],"topic":{"value":"Non-work + banter and water cooler conversation","creator":"UN9NG04TG","last_set":1568143383},"purpose":{"value":"A + place for non-work-related flimflam, faffing, hodge-podge or jibber-jabber + you''d prefer to keep out of more focused work-related channels.","creator":"UN9NG04TG","last_set":1568143383},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' + http_version: + recorded_at: Tue, 10 Sep 2019 23:34:49 GMT +recorded_with: VCR 5.0.0 diff --git a/test/cassettes/list_users.yml b/test/cassettes/list_users.yml index 0fb97e9e..b12057eb 100644 --- a/test/cassettes/list_users.yml +++ b/test/cassettes/list_users.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: get - uri: https://slack.com/api/users.list?token=xoxp-744084534355-757764004934-757426544519-ce0ad9ca69a14ee864a03c3f467f1059 + uri: https://slack.com/api/users.list?token= body: encoding: US-ASCII string: '' @@ -21,17 +21,17 @@ http_interactions: Content-Type: - application/json; charset=utf-8 Content-Length: - - '916' + - '914' Connection: - keep-alive Date: - - Tue, 10 Sep 2019 22:32:15 GMT + - Tue, 10 Sep 2019 23:34:48 GMT Server: - Apache X-Content-Type-Options: - nosniff X-Slack-Req-Id: - - cd544d0a-f7da-4a5c-afa4-e3d7f0250f0d + - 46187173-9f67-4078-a83a-58c8b1a7867f X-Oauth-Scopes: - identify,channels:read,users:read,chat:write:bot Expires: @@ -57,21 +57,21 @@ http_interactions: Access-Control-Allow-Origin: - "*" X-Via: - - haproxy-www-153o + - haproxy-www-6nq8 X-Cache: - Miss from cloudfront Via: - - 1.1 42ef990e439ae115ff739f04e3945234.cloudfront.net (CloudFront) + - 1.1 b48dedcc55e63f14261aa92cf2d61522.cloudfront.net (CloudFront) X-Amz-Cf-Pop: - SEA19-C1 X-Amz-Cf-Id: - - C_ESYo4_MBnpbZMnSb9OErumLL1hvomRecw-qRTpfYrevORIkGlMKQ== + - ibWCpHv0Cbu3jBrVNyjC2SQdkVGc6FSr6SAonHZU4DWvOuB9Eu6DZQ== body: encoding: ASCII-8BIT string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"TMW2GFQAF","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":null,"tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Slackbot","real_name_normalized":"Slackbot","display_name":"Slackbot","display_name_normalized":"Slackbot","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"sv41d8cd98f0","always_active":true,"first_name":"slackbot","last_name":"","image_24":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png","image_32":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png","image_192":"https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png","image_512":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png","status_text_canonical":"","team":"TMW2GFQAF"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":0},{"id":"UN9C6R7EK","team_id":"TMW2GFQAF","name":"davenport.paige","deleted":false,"color":"4bbe2e","real_name":"Paige","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Paige","real_name_normalized":"Paige","display_name":"Paige","display_name_normalized":"Paige","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g68b577a7f23","image_24":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-512.png","status_text_canonical":"","team":"TMW2GFQAF"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568143450,"has_2fa":false},{"id":"UN9NG04TG","team_id":"TMW2GFQAF","name":"angele.zam","deleted":false,"color":"9f69e7","real_name":"angele.zam","tz":"America\/Los_Angeles","tz_label":"Pacific - Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"angele.zam","real_name_normalized":"angele.zam","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gee46bbc96e3","image_24":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-512.png","status_text_canonical":"","team":"TMW2GFQAF"},"is_admin":true,"is_owner":true,"is_primary_owner":true,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568143383,"has_2fa":false}],"cache_ts":1568154735,"response_metadata":{"next_cursor":""}}' + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"angele.zam","real_name_normalized":"angele.zam","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gee46bbc96e3","image_24":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-512.png","status_text_canonical":"","team":"TMW2GFQAF"},"is_admin":true,"is_owner":true,"is_primary_owner":true,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568143383}],"cache_ts":1568158488,"response_metadata":{"next_cursor":""}}' http_version: - recorded_at: Tue, 10 Sep 2019 22:32:15 GMT + recorded_at: Tue, 10 Sep 2019 23:34:48 GMT recorded_with: VCR 5.0.0 diff --git a/test/test_helper.rb b/test/test_helper.rb index e4c62dd1..a6c21919 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -17,6 +17,14 @@ require_relative '../lib/workspace.rb' VCR.configure do |config| - config.cassette_library_dir = "test/cassettes" - config.hook_into :webmock + config.cassette_library_dir = "test/cassettes" # folder where casettes will be located + config.hook_into :webmock # tie into this other tool called webmock + config.default_cassette_options = { + :record => :new_episodes, # record new data when we don't have it yet + :match_requests_on => [:method, :uri, :body], # The http method, URI and body of a request all need to match + } + # Don't leave our token lying around in a cassette file. + config.filter_sensitive_data("") do + ENV["API_TOKEN"] + end end From 09d3f010342397deb3fecbd0f0057f201cc042fe Mon Sep 17 00:00:00 2001 From: Paige Davenport Date: Tue, 10 Sep 2019 16:44:20 -0700 Subject: [PATCH 09/32] Added self.list method and tests. --- lib/channel.rb | 18 +++++++++++++++++- test/channel_test.rb | 13 +++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/lib/channel.rb b/lib/channel.rb index 482dd27c..ad292be4 100644 --- a/lib/channel.rb +++ b/lib/channel.rb @@ -1,3 +1,5 @@ +require "awesome_print" + module SlackCLI class Channel < Recipient attr_reader :topic, :member_count @@ -7,6 +9,20 @@ def initialize(slack_id:, name:, topic:, member_count:) @topic = topic @member_count = member_count end - + + def self.list + response = self.get("https://slack.com/api/channels.list") + + channels = response["channels"].map do |channel| + slack_id = channel["id"] + name = channel["name"] + topic = channel["topic"] + member_count = channel["members"].length + + SlackCLI::Channel.new(slack_id: slack_id, name: name, topic: topic, member_count: member_count) + end + + return channels + end end end diff --git a/test/channel_test.rb b/test/channel_test.rb index 682fc0b4..f22d94ac 100644 --- a/test/channel_test.rb +++ b/test/channel_test.rb @@ -19,6 +19,19 @@ expect(new_channel.class < SlackCLI::Recipient).must_equal true end + describe "self.list" do + it "creates a list of all channels" do + VCR.use_cassette("list_channels") do + channel_list = SlackCLI::Channel.list + + expect(channel_list).must_be_instance_of Array + expect(channel_list.first).must_be_instance_of SlackCLI::Channel + end + + end + + end + end From d727d4b6e2cb24362ebbebd3d8bc55160fbb1345 Mon Sep 17 00:00:00 2001 From: geli-gel Date: Tue, 10 Sep 2019 17:13:43 -0700 Subject: [PATCH 10/32] updated Workspace to initialize with User and Channel .list and added a test --- lib/workspace.rb | 7 +++++-- test/workspace_test.rb | 13 +++++++++---- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/lib/workspace.rb b/lib/workspace.rb index e52f898e..43173ae5 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -1,11 +1,14 @@ +require_relative 'user' +require_relative 'channel' + module SlackCLI class Workspace attr_reader :users, :channels attr_accessor :selected def initialize - @users = [] - @channels = [] + @users = SlackCLI::User.list + @channels = SlackCLI::Channel.list @selected = nil end end diff --git a/test/workspace_test.rb b/test/workspace_test.rb index 73d85d60..bd2f7085 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -2,13 +2,18 @@ describe "Workspace" do describe "initialize" do + before do + @new_workspace = SlackCLI::Workspace.new() + end it "can initialize" do - new_workspace = SlackCLI::Workspace.new + expect(@new_workspace).must_be_instance_of SlackCLI::Workspace + end - expect(new_workspace).must_be_instance_of SlackCLI::Workspace + it "stores instances of User in @users" do + expect(@new_workspace.users.first).must_be_instance_of SlackCLI::User end - end - + end + end From 19d7b70a8997f2f1b71dbfcb8960672d2b24d5de Mon Sep 17 00:00:00 2001 From: Paige Davenport Date: Wed, 11 Sep 2019 13:44:26 -0700 Subject: [PATCH 11/32] Added test for workspace initialize. --- test/cassettes/new_workspace.yml | 154 +++++++++++++++++++++++++++++++ test/workspace_test.rb | 4 +- 2 files changed, 157 insertions(+), 1 deletion(-) create mode 100644 test/cassettes/new_workspace.yml diff --git a/test/cassettes/new_workspace.yml b/test/cassettes/new_workspace.yml new file mode 100644 index 00000000..983f9ab5 --- /dev/null +++ b/test/cassettes/new_workspace.yml @@ -0,0 +1,154 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/users.list?token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '914' + Connection: + - keep-alive + Date: + - Wed, 11 Sep 2019 00:16:08 GMT + Server: + - Apache + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - 2b0092ae-783a-4f27-abe0-9a56d2ef0b63 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write:bot + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - users:read + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-yp93 + X-Cache: + - Miss from cloudfront + Via: + - 1.1 4d8620b80ebe37d366388e117039aa8e.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C1 + X-Amz-Cf-Id: + - VTFpfDiVk4VFIbgF7DjR-WYCKbibdVxFc_QIJ6_ZgWYAuoJPNCLqGA== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"TMW2GFQAF","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":null,"tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Slackbot","real_name_normalized":"Slackbot","display_name":"Slackbot","display_name_normalized":"Slackbot","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"sv41d8cd98f0","always_active":true,"first_name":"slackbot","last_name":"","image_24":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png","image_32":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png","image_192":"https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png","image_512":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png","status_text_canonical":"","team":"TMW2GFQAF"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":0},{"id":"UN9C6R7EK","team_id":"TMW2GFQAF","name":"davenport.paige","deleted":false,"color":"4bbe2e","real_name":"Paige","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Paige","real_name_normalized":"Paige","display_name":"Paige","display_name_normalized":"Paige","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g68b577a7f23","image_24":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-512.png","status_text_canonical":"","team":"TMW2GFQAF"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568143450,"has_2fa":false},{"id":"UN9NG04TG","team_id":"TMW2GFQAF","name":"angele.zam","deleted":false,"color":"9f69e7","real_name":"angele.zam","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"angele.zam","real_name_normalized":"angele.zam","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gee46bbc96e3","image_24":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-512.png","status_text_canonical":"","team":"TMW2GFQAF"},"is_admin":true,"is_owner":true,"is_primary_owner":true,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568143383}],"cache_ts":1568160968,"response_metadata":{"next_cursor":""}}' + http_version: + recorded_at: Wed, 11 Sep 2019 00:16:08 GMT +- request: + method: get + uri: https://slack.com/api/channels.list?token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '553' + Connection: + - keep-alive + Date: + - Wed, 11 Sep 2019 00:16:08 GMT + Server: + - Apache + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - e4c08c5f-f74f-473d-bb84-efcb0ac538a6 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write:bot + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - channels:read + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-zh1h + X-Cache: + - Miss from cloudfront + Via: + - 1.1 786d821259e050ebca76b8e357819f78.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C1 + X-Amz-Cf-Id: + - XYckaWmsIqige3xsOmoegEkSFzhr-ZOPxZ36D0YON97jd_hnXE55gQ== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channels":[{"id":"CMW2GGWN7","name":"slack-cli","is_channel":true,"created":1568143384,"is_archived":false,"is_general":false,"unlinked":0,"creator":"UN9NG04TG","name_normalized":"slack-cli","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UN9C6R7EK","UN9NG04TG"],"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"","creator":"","last_set":0},"previous_names":[],"num_members":2},{"id":"CN7G55J00","name":"general","is_channel":true,"created":1568143383,"is_archived":false,"is_general":true,"unlinked":0,"creator":"UN9NG04TG","name_normalized":"general","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UN9C6R7EK","UN9NG04TG"],"topic":{"value":"Company-wide + announcements and work-based matters","creator":"UN9NG04TG","last_set":1568143383},"purpose":{"value":"This + channel is for workspace-wide communication and announcements. All members + are in this channel.","creator":"UN9NG04TG","last_set":1568143383},"previous_names":[],"num_members":2},{"id":"CN9NG0YUE","name":"random","is_channel":true,"created":1568143383,"is_archived":false,"is_general":false,"unlinked":0,"creator":"UN9NG04TG","name_normalized":"random","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UN9C6R7EK","UN9NG04TG"],"topic":{"value":"Non-work + banter and water cooler conversation","creator":"UN9NG04TG","last_set":1568143383},"purpose":{"value":"A + place for non-work-related flimflam, faffing, hodge-podge or jibber-jabber + you''d prefer to keep out of more focused work-related channels.","creator":"UN9NG04TG","last_set":1568143383},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' + http_version: + recorded_at: Wed, 11 Sep 2019 00:16:09 GMT +recorded_with: VCR 5.0.0 diff --git a/test/workspace_test.rb b/test/workspace_test.rb index bd2f7085..91ec0ad8 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -3,7 +3,9 @@ describe "Workspace" do describe "initialize" do before do - @new_workspace = SlackCLI::Workspace.new() + VCR.use_cassette("new_workspace") do + @new_workspace = SlackCLI::Workspace.new + end end it "can initialize" do expect(@new_workspace).must_be_instance_of SlackCLI::Workspace From 62270c4732e52221a2f4ca8959cc23e8bbb1acc7 Mon Sep 17 00:00:00 2001 From: geli-gel Date: Wed, 11 Sep 2019 14:59:46 -0700 Subject: [PATCH 12/32] small changes to require and require_relative --- lib/channel.rb | 2 +- lib/recipient.rb | 3 +++ lib/user.rb | 4 +--- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/channel.rb b/lib/channel.rb index ad292be4..1e6b1368 100644 --- a/lib/channel.rb +++ b/lib/channel.rb @@ -1,4 +1,4 @@ -require "awesome_print" +require_relative 'recipient' module SlackCLI class Channel < Recipient diff --git a/lib/recipient.rb b/lib/recipient.rb index da8a54c2..1c699b80 100644 --- a/lib/recipient.rb +++ b/lib/recipient.rb @@ -1,4 +1,7 @@ require 'httparty' +require 'dotenv' + +Dotenv.load module SlackCLI class Recipient diff --git a/lib/user.rb b/lib/user.rb index 64b26d3e..4f608645 100644 --- a/lib/user.rb +++ b/lib/user.rb @@ -1,8 +1,6 @@ +require_relative 'recipient' require 'httparty' -require 'awesome_print' -require 'dotenv' -Dotenv.load module SlackCLI class User < Recipient From ef7d60881fd6fe10c3726ef3e0fdac8bdb4471a6 Mon Sep 17 00:00:00 2001 From: geli-gel Date: Wed, 11 Sep 2019 15:00:19 -0700 Subject: [PATCH 13/32] retested VCR --- test/cassettes/list_channels.yml | 22 +++++++------- test/cassettes/list_users.yml | 27 +++++++++--------- test/cassettes/new_workspace.yml | 49 ++++++++++++++++---------------- 3 files changed, 50 insertions(+), 48 deletions(-) diff --git a/test/cassettes/list_channels.yml b/test/cassettes/list_channels.yml index 180e7287..db5f2c64 100644 --- a/test/cassettes/list_channels.yml +++ b/test/cassettes/list_channels.yml @@ -21,19 +21,19 @@ http_interactions: Content-Type: - application/json; charset=utf-8 Content-Length: - - '553' + - '527' Connection: - keep-alive Date: - - Tue, 10 Sep 2019 23:34:49 GMT + - Wed, 11 Sep 2019 20:56:38 GMT Server: - Apache X-Content-Type-Options: - nosniff X-Slack-Req-Id: - - 740b8d45-ce63-4813-9f28-d44bde1fad49 + - 7bf7584d-bdb5-435b-a21f-787ebcbdb807 X-Oauth-Scopes: - - identify,channels:read,users:read,chat:write:bot + - identify,read,post,client,apps,admin Expires: - Mon, 26 Jul 1997 05:00:00 GMT Cache-Control: @@ -43,7 +43,7 @@ http_interactions: X-Xss-Protection: - '0' X-Accepted-Oauth-Scopes: - - channels:read + - channels:read,read Vary: - Accept-Encoding Pragma: @@ -57,24 +57,24 @@ http_interactions: Access-Control-Allow-Origin: - "*" X-Via: - - haproxy-www-ocf7 + - haproxy-www-0guu X-Cache: - Miss from cloudfront Via: - - 1.1 10b37ec1ede3e33f11dd42b87558cd1f.cloudfront.net (CloudFront) + - 1.1 7514e5e25722778fd4b1744d4ecc67e1.cloudfront.net (CloudFront) X-Amz-Cf-Pop: - SEA19-C1 X-Amz-Cf-Id: - - ATzYvx-fNHHf9IpBfeRGplKIMSi371onlJI_Toix1utM5yRizhR7YQ== + - cy77wm17cTavGLywNY_UP37pNglFR-LWBg5iR0zXY2kOw2bFJd2Mwg== body: encoding: ASCII-8BIT - string: '{"ok":true,"channels":[{"id":"CMW2GGWN7","name":"slack-cli","is_channel":true,"created":1568143384,"is_archived":false,"is_general":false,"unlinked":0,"creator":"UN9NG04TG","name_normalized":"slack-cli","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UN9C6R7EK","UN9NG04TG"],"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"","creator":"","last_set":0},"previous_names":[],"num_members":2},{"id":"CN7G55J00","name":"general","is_channel":true,"created":1568143383,"is_archived":false,"is_general":true,"unlinked":0,"creator":"UN9NG04TG","name_normalized":"general","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UN9C6R7EK","UN9NG04TG"],"topic":{"value":"Company-wide + string: '{"ok":true,"channels":[{"id":"CN7G55J00","name":"general","is_channel":true,"created":1568143383,"is_archived":false,"is_general":true,"unlinked":0,"creator":"UN9NG04TG","name_normalized":"general","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UN9C6R7EK","UN9NG04TG"],"topic":{"value":"Company-wide announcements and work-based matters","creator":"UN9NG04TG","last_set":1568143383},"purpose":{"value":"This channel is for workspace-wide communication and announcements. All members are in this channel.","creator":"UN9NG04TG","last_set":1568143383},"previous_names":[],"num_members":2},{"id":"CN9NG0YUE","name":"random","is_channel":true,"created":1568143383,"is_archived":false,"is_general":false,"unlinked":0,"creator":"UN9NG04TG","name_normalized":"random","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UN9C6R7EK","UN9NG04TG"],"topic":{"value":"Non-work banter and water cooler conversation","creator":"UN9NG04TG","last_set":1568143383},"purpose":{"value":"A place for non-work-related flimflam, faffing, hodge-podge or jibber-jabber - you''d prefer to keep out of more focused work-related channels.","creator":"UN9NG04TG","last_set":1568143383},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' + you''d prefer to keep out of more focused work-related channels.","creator":"UN9NG04TG","last_set":1568143383},"previous_names":[],"num_members":2},{"id":"CMW2GGWN7","name":"slack-cli","is_channel":true,"created":1568143384,"is_archived":false,"is_general":false,"unlinked":0,"creator":"UN9NG04TG","name_normalized":"slack-cli","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UN9C6R7EK","UN9NG04TG"],"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"","creator":"","last_set":0},"previous_names":[],"num_members":2}]}' http_version: - recorded_at: Tue, 10 Sep 2019 23:34:49 GMT + recorded_at: Wed, 11 Sep 2019 20:56:38 GMT recorded_with: VCR 5.0.0 diff --git a/test/cassettes/list_users.yml b/test/cassettes/list_users.yml index b12057eb..8600be67 100644 --- a/test/cassettes/list_users.yml +++ b/test/cassettes/list_users.yml @@ -21,19 +21,19 @@ http_interactions: Content-Type: - application/json; charset=utf-8 Content-Length: - - '914' + - '937' Connection: - keep-alive Date: - - Tue, 10 Sep 2019 23:34:48 GMT + - Wed, 11 Sep 2019 20:56:38 GMT Server: - Apache X-Content-Type-Options: - nosniff X-Slack-Req-Id: - - 46187173-9f67-4078-a83a-58c8b1a7867f + - ae996111-7e5c-4ebf-9984-8597be43d85e X-Oauth-Scopes: - - identify,channels:read,users:read,chat:write:bot + - identify,read,post,client,apps,admin Expires: - Mon, 26 Jul 1997 05:00:00 GMT Cache-Control: @@ -43,7 +43,7 @@ http_interactions: X-Xss-Protection: - '0' X-Accepted-Oauth-Scopes: - - users:read + - users:read,read Vary: - Accept-Encoding Pragma: @@ -57,21 +57,22 @@ http_interactions: Access-Control-Allow-Origin: - "*" X-Via: - - haproxy-www-6nq8 + - haproxy-www-iuw2 X-Cache: - Miss from cloudfront Via: - - 1.1 b48dedcc55e63f14261aa92cf2d61522.cloudfront.net (CloudFront) + - 1.1 adc2002956acc4d61bfbf3b973fdf247.cloudfront.net (CloudFront) X-Amz-Cf-Pop: - SEA19-C1 X-Amz-Cf-Id: - - ibWCpHv0Cbu3jBrVNyjC2SQdkVGc6FSr6SAonHZU4DWvOuB9Eu6DZQ== + - oQ669cDi6QAHIZcS5nguy7M7URmJ4ImD4TQIRp3X4X7DhYebHSYzqw== body: encoding: ASCII-8BIT - string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"TMW2GFQAF","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":null,"tz_label":"Pacific - Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Slackbot","real_name_normalized":"Slackbot","display_name":"Slackbot","display_name_normalized":"Slackbot","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"sv41d8cd98f0","always_active":true,"first_name":"slackbot","last_name":"","image_24":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png","image_32":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png","image_192":"https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png","image_512":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png","status_text_canonical":"","team":"TMW2GFQAF"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":0},{"id":"UN9C6R7EK","team_id":"TMW2GFQAF","name":"davenport.paige","deleted":false,"color":"4bbe2e","real_name":"Paige","tz":"America\/Los_Angeles","tz_label":"Pacific - Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Paige","real_name_normalized":"Paige","display_name":"Paige","display_name_normalized":"Paige","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g68b577a7f23","image_24":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-512.png","status_text_canonical":"","team":"TMW2GFQAF"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568143450,"has_2fa":false},{"id":"UN9NG04TG","team_id":"TMW2GFQAF","name":"angele.zam","deleted":false,"color":"9f69e7","real_name":"angele.zam","tz":"America\/Los_Angeles","tz_label":"Pacific - Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"angele.zam","real_name_normalized":"angele.zam","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gee46bbc96e3","image_24":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-512.png","status_text_canonical":"","team":"TMW2GFQAF"},"is_admin":true,"is_owner":true,"is_primary_owner":true,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568143383}],"cache_ts":1568158488,"response_metadata":{"next_cursor":""}}' + string: '{"ok":true,"members":[{"id":"UN9C6R7EK","team_id":"TMW2GFQAF","name":"davenport.paige","deleted":false,"color":"4bbe2e","real_name":"Paige","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Paige","real_name_normalized":"Paige","display_name":"Paige","display_name_normalized":"Paige","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g68b577a7f23","email":"davenport.paige@outlook.com","image_24":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-512.png","status_text_canonical":"","team":"TMW2GFQAF"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568143450,"has_2fa":false},{"id":"UN9NG04TG","team_id":"TMW2GFQAF","name":"angele.zam","deleted":false,"color":"9f69e7","real_name":"Angele + Zamarron","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Angele + Zamarron","real_name_normalized":"Angele Zamarron","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gee46bbc96e3","email":"angele.zam@gmail.com","first_name":"Angele","last_name":"Zamarron","image_24":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-512.png","status_text_canonical":"","team":"TMW2GFQAF"},"is_admin":true,"is_owner":true,"is_primary_owner":true,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568221139,"has_2fa":false},{"id":"USLACKBOT","team_id":"TMW2GFQAF","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":null,"tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Slackbot","real_name_normalized":"Slackbot","display_name":"Slackbot","display_name_normalized":"Slackbot","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"sv41d8cd98f0","always_active":true,"first_name":"slackbot","last_name":"","image_24":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png","image_32":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png","image_192":"https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png","image_512":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png","status_text_canonical":"","team":"TMW2GFQAF"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":0}],"cache_ts":1568235398}' http_version: - recorded_at: Tue, 10 Sep 2019 23:34:48 GMT + recorded_at: Wed, 11 Sep 2019 20:56:39 GMT recorded_with: VCR 5.0.0 diff --git a/test/cassettes/new_workspace.yml b/test/cassettes/new_workspace.yml index 983f9ab5..98e4218c 100644 --- a/test/cassettes/new_workspace.yml +++ b/test/cassettes/new_workspace.yml @@ -21,19 +21,19 @@ http_interactions: Content-Type: - application/json; charset=utf-8 Content-Length: - - '914' + - '937' Connection: - keep-alive Date: - - Wed, 11 Sep 2019 00:16:08 GMT + - Wed, 11 Sep 2019 20:56:38 GMT Server: - Apache X-Content-Type-Options: - nosniff X-Slack-Req-Id: - - 2b0092ae-783a-4f27-abe0-9a56d2ef0b63 + - 16a8e857-55d3-4660-b5da-445e933fe5d5 X-Oauth-Scopes: - - identify,channels:read,users:read,chat:write:bot + - identify,read,post,client,apps,admin Expires: - Mon, 26 Jul 1997 05:00:00 GMT Cache-Control: @@ -43,7 +43,7 @@ http_interactions: X-Xss-Protection: - '0' X-Accepted-Oauth-Scopes: - - users:read + - users:read,read Vary: - Accept-Encoding Pragma: @@ -57,23 +57,24 @@ http_interactions: Access-Control-Allow-Origin: - "*" X-Via: - - haproxy-www-yp93 + - haproxy-www-vdna X-Cache: - Miss from cloudfront Via: - - 1.1 4d8620b80ebe37d366388e117039aa8e.cloudfront.net (CloudFront) + - 1.1 10b37ec1ede3e33f11dd42b87558cd1f.cloudfront.net (CloudFront) X-Amz-Cf-Pop: - SEA19-C1 X-Amz-Cf-Id: - - VTFpfDiVk4VFIbgF7DjR-WYCKbibdVxFc_QIJ6_ZgWYAuoJPNCLqGA== + - RHkRsdMbUmHodVxxb5AK8JvobKCNvypc2veIRMiqYmB5YI9ECsmwMQ== body: encoding: ASCII-8BIT - string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"TMW2GFQAF","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":null,"tz_label":"Pacific - Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Slackbot","real_name_normalized":"Slackbot","display_name":"Slackbot","display_name_normalized":"Slackbot","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"sv41d8cd98f0","always_active":true,"first_name":"slackbot","last_name":"","image_24":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png","image_32":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png","image_192":"https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png","image_512":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png","status_text_canonical":"","team":"TMW2GFQAF"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":0},{"id":"UN9C6R7EK","team_id":"TMW2GFQAF","name":"davenport.paige","deleted":false,"color":"4bbe2e","real_name":"Paige","tz":"America\/Los_Angeles","tz_label":"Pacific - Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Paige","real_name_normalized":"Paige","display_name":"Paige","display_name_normalized":"Paige","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g68b577a7f23","image_24":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-512.png","status_text_canonical":"","team":"TMW2GFQAF"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568143450,"has_2fa":false},{"id":"UN9NG04TG","team_id":"TMW2GFQAF","name":"angele.zam","deleted":false,"color":"9f69e7","real_name":"angele.zam","tz":"America\/Los_Angeles","tz_label":"Pacific - Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"angele.zam","real_name_normalized":"angele.zam","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gee46bbc96e3","image_24":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-512.png","status_text_canonical":"","team":"TMW2GFQAF"},"is_admin":true,"is_owner":true,"is_primary_owner":true,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568143383}],"cache_ts":1568160968,"response_metadata":{"next_cursor":""}}' + string: '{"ok":true,"members":[{"id":"UN9C6R7EK","team_id":"TMW2GFQAF","name":"davenport.paige","deleted":false,"color":"4bbe2e","real_name":"Paige","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Paige","real_name_normalized":"Paige","display_name":"Paige","display_name_normalized":"Paige","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g68b577a7f23","email":"davenport.paige@outlook.com","image_24":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-512.png","status_text_canonical":"","team":"TMW2GFQAF"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568143450,"has_2fa":false},{"id":"UN9NG04TG","team_id":"TMW2GFQAF","name":"angele.zam","deleted":false,"color":"9f69e7","real_name":"Angele + Zamarron","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Angele + Zamarron","real_name_normalized":"Angele Zamarron","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gee46bbc96e3","email":"angele.zam@gmail.com","first_name":"Angele","last_name":"Zamarron","image_24":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-512.png","status_text_canonical":"","team":"TMW2GFQAF"},"is_admin":true,"is_owner":true,"is_primary_owner":true,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568221139,"has_2fa":false},{"id":"USLACKBOT","team_id":"TMW2GFQAF","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":null,"tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Slackbot","real_name_normalized":"Slackbot","display_name":"Slackbot","display_name_normalized":"Slackbot","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"sv41d8cd98f0","always_active":true,"first_name":"slackbot","last_name":"","image_24":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png","image_32":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png","image_192":"https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png","image_512":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png","status_text_canonical":"","team":"TMW2GFQAF"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":0}],"cache_ts":1568235398}' http_version: - recorded_at: Wed, 11 Sep 2019 00:16:08 GMT + recorded_at: Wed, 11 Sep 2019 20:56:38 GMT - request: method: get uri: https://slack.com/api/channels.list?token= @@ -95,19 +96,19 @@ http_interactions: Content-Type: - application/json; charset=utf-8 Content-Length: - - '553' + - '527' Connection: - keep-alive Date: - - Wed, 11 Sep 2019 00:16:08 GMT + - Wed, 11 Sep 2019 20:56:38 GMT Server: - Apache X-Content-Type-Options: - nosniff X-Slack-Req-Id: - - e4c08c5f-f74f-473d-bb84-efcb0ac538a6 + - f2b8bfca-95ee-4d19-a983-a5bc16fa0292 X-Oauth-Scopes: - - identify,channels:read,users:read,chat:write:bot + - identify,read,post,client,apps,admin Expires: - Mon, 26 Jul 1997 05:00:00 GMT Cache-Control: @@ -117,7 +118,7 @@ http_interactions: X-Xss-Protection: - '0' X-Accepted-Oauth-Scopes: - - channels:read + - channels:read,read Vary: - Accept-Encoding Pragma: @@ -131,24 +132,24 @@ http_interactions: Access-Control-Allow-Origin: - "*" X-Via: - - haproxy-www-zh1h + - haproxy-www-nvih X-Cache: - Miss from cloudfront Via: - - 1.1 786d821259e050ebca76b8e357819f78.cloudfront.net (CloudFront) + - 1.1 27a84054de24e45f952ea4056a821764.cloudfront.net (CloudFront) X-Amz-Cf-Pop: - SEA19-C1 X-Amz-Cf-Id: - - XYckaWmsIqige3xsOmoegEkSFzhr-ZOPxZ36D0YON97jd_hnXE55gQ== + - i81pOnjCiSq1zF0YPuRGt0wEnZ-akW8ddf3zFVIeM2zY9BMLoCjELA== body: encoding: ASCII-8BIT - string: '{"ok":true,"channels":[{"id":"CMW2GGWN7","name":"slack-cli","is_channel":true,"created":1568143384,"is_archived":false,"is_general":false,"unlinked":0,"creator":"UN9NG04TG","name_normalized":"slack-cli","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UN9C6R7EK","UN9NG04TG"],"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"","creator":"","last_set":0},"previous_names":[],"num_members":2},{"id":"CN7G55J00","name":"general","is_channel":true,"created":1568143383,"is_archived":false,"is_general":true,"unlinked":0,"creator":"UN9NG04TG","name_normalized":"general","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UN9C6R7EK","UN9NG04TG"],"topic":{"value":"Company-wide + string: '{"ok":true,"channels":[{"id":"CN7G55J00","name":"general","is_channel":true,"created":1568143383,"is_archived":false,"is_general":true,"unlinked":0,"creator":"UN9NG04TG","name_normalized":"general","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UN9C6R7EK","UN9NG04TG"],"topic":{"value":"Company-wide announcements and work-based matters","creator":"UN9NG04TG","last_set":1568143383},"purpose":{"value":"This channel is for workspace-wide communication and announcements. All members are in this channel.","creator":"UN9NG04TG","last_set":1568143383},"previous_names":[],"num_members":2},{"id":"CN9NG0YUE","name":"random","is_channel":true,"created":1568143383,"is_archived":false,"is_general":false,"unlinked":0,"creator":"UN9NG04TG","name_normalized":"random","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UN9C6R7EK","UN9NG04TG"],"topic":{"value":"Non-work banter and water cooler conversation","creator":"UN9NG04TG","last_set":1568143383},"purpose":{"value":"A place for non-work-related flimflam, faffing, hodge-podge or jibber-jabber - you''d prefer to keep out of more focused work-related channels.","creator":"UN9NG04TG","last_set":1568143383},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' + you''d prefer to keep out of more focused work-related channels.","creator":"UN9NG04TG","last_set":1568143383},"previous_names":[],"num_members":2},{"id":"CMW2GGWN7","name":"slack-cli","is_channel":true,"created":1568143384,"is_archived":false,"is_general":false,"unlinked":0,"creator":"UN9NG04TG","name_normalized":"slack-cli","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UN9C6R7EK","UN9NG04TG"],"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"","creator":"","last_set":0},"previous_names":[],"num_members":2}]}' http_version: - recorded_at: Wed, 11 Sep 2019 00:16:09 GMT + recorded_at: Wed, 11 Sep 2019 20:56:38 GMT recorded_with: VCR 5.0.0 From 84b14fdc4a419b33a602f3dc0d6f25731f54b483 Mon Sep 17 00:00:00 2001 From: geli-gel Date: Wed, 11 Sep 2019 15:00:58 -0700 Subject: [PATCH 14/32] created CLI and menu_options method --- lib/slack.rb | 46 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 43 insertions(+), 3 deletions(-) diff --git a/lib/slack.rb b/lib/slack.rb index 69ef8357..f14f3f53 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -1,11 +1,51 @@ #!/usr/bin/env ruby +require_relative 'workspace' +require 'table_print' +require 'terminal-table' def main - puts "Welcome to the Ada Slack CLI!" + puts "\nWelcome to the Ada Slack CLI!" + workspace = SlackCLI::Workspace.new + channels_count = workspace.channels.length + users_count = workspace.users.length + puts "\n#{channels_count} channels and #{users_count} users loaded" + + choice = "" + until choice == "quit" || choice == "3" + puts "\nWhat would you like to do?" + menu_options + print "Action: " + choice = gets.chomp.downcase + case choice + when "1","list users" + list_users + when "2","list channels" + list_channels + else + puts "That option does not exist" + end + end - # TODO project + puts "Thank you for using the Ada Slack CLI" +end + +def menu_options + numbered_options = [ + ["1", "list users"], + ["2", "list channels"], + ["3", "quit"] + ] + menu_table = Terminal::Table.new :headings => ["#", "Action"], :rows => numbered_options + puts menu_table +end - puts "Tharnk you for using the Ada Slack CLI" +def list_users + # list users end +def list_channels + # list channels +end + + main if __FILE__ == $PROGRAM_NAME From 1a3a95c3c0f2ab6c25221166f35e1d430e1216e2 Mon Sep 17 00:00:00 2001 From: Paige Davenport Date: Wed, 11 Sep 2019 15:47:31 -0700 Subject: [PATCH 15/32] Added list channels method to slack.rb --- lib/slack.rb | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/lib/slack.rb b/lib/slack.rb index f14f3f53..ab18b738 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -11,16 +11,19 @@ def main puts "\n#{channels_count} channels and #{users_count} users loaded" choice = "" - until choice == "quit" || choice == "3" + until choice == "3" || choice == "quit" puts "\nWhat would you like to do?" menu_options print "Action: " choice = gets.chomp.downcase + case choice when "1","list users" - list_users + list_users(workspace) when "2","list channels" - list_channels + list_channels(workspace) + when "6","quit" + break else puts "That option does not exist" end @@ -33,18 +36,21 @@ def menu_options numbered_options = [ ["1", "list users"], ["2", "list channels"], - ["3", "quit"] + ["3", "select user"], + ["4", "select channel"], + ["5", "details"], + ["6","quit"] ] menu_table = Terminal::Table.new :headings => ["#", "Action"], :rows => numbered_options puts menu_table end -def list_users - # list users +def list_users(workspace) + tp workspace.users, :slack_id, :name, :real_name end -def list_channels - # list channels +def list_channels(workspace) + tp workspace.channels, :slack_id, :name, :topic, :member_count end From 6c5aeca1dbbdd28aff849af8edc9e421fce1d73b Mon Sep 17 00:00:00 2001 From: Paige Davenport Date: Wed, 11 Sep 2019 15:49:39 -0700 Subject: [PATCH 16/32] Updated self.list for channels and corresponding cassetes. --- lib/channel.rb | 5 +++- test/cassettes/list_channels.yml | 25 ++++++++-------- test/cassettes/list_users.yml | 26 ++++++++-------- test/cassettes/new_workspace.yml | 51 ++++++++++++++++---------------- 4 files changed, 56 insertions(+), 51 deletions(-) diff --git a/lib/channel.rb b/lib/channel.rb index 1e6b1368..485d09fb 100644 --- a/lib/channel.rb +++ b/lib/channel.rb @@ -16,7 +16,7 @@ def self.list channels = response["channels"].map do |channel| slack_id = channel["id"] name = channel["name"] - topic = channel["topic"] + topic = channel["topic"]["value"] member_count = channel["members"].length SlackCLI::Channel.new(slack_id: slack_id, name: name, topic: topic, member_count: member_count) @@ -24,5 +24,8 @@ def self.list return channels end + + # def details + # end end end diff --git a/test/cassettes/list_channels.yml b/test/cassettes/list_channels.yml index db5f2c64..ad222de9 100644 --- a/test/cassettes/list_channels.yml +++ b/test/cassettes/list_channels.yml @@ -21,19 +21,19 @@ http_interactions: Content-Type: - application/json; charset=utf-8 Content-Length: - - '527' + - '585' Connection: - keep-alive Date: - - Wed, 11 Sep 2019 20:56:38 GMT + - Wed, 11 Sep 2019 22:21:18 GMT Server: - Apache X-Content-Type-Options: - nosniff X-Slack-Req-Id: - - 7bf7584d-bdb5-435b-a21f-787ebcbdb807 + - 59b42be1-cf11-4c6d-a5d6-ea505f07aee8 X-Oauth-Scopes: - - identify,read,post,client,apps,admin + - identify,channels:read,users:read,chat:write:bot Expires: - Mon, 26 Jul 1997 05:00:00 GMT Cache-Control: @@ -43,7 +43,7 @@ http_interactions: X-Xss-Protection: - '0' X-Accepted-Oauth-Scopes: - - channels:read,read + - channels:read Vary: - Accept-Encoding Pragma: @@ -57,24 +57,25 @@ http_interactions: Access-Control-Allow-Origin: - "*" X-Via: - - haproxy-www-0guu + - haproxy-www-1ir4 X-Cache: - Miss from cloudfront Via: - - 1.1 7514e5e25722778fd4b1744d4ecc67e1.cloudfront.net (CloudFront) + - 1.1 e785d36fcfe1e6758d8c1a9a71445bbe.cloudfront.net (CloudFront) X-Amz-Cf-Pop: - - SEA19-C1 + - SEA19 X-Amz-Cf-Id: - - cy77wm17cTavGLywNY_UP37pNglFR-LWBg5iR0zXY2kOw2bFJd2Mwg== + - fF0VOr1CNSyQkCXj_W2ndTic1nGZx9AAIULbLZLatkeuAfD1GQ02xg== body: encoding: ASCII-8BIT - string: '{"ok":true,"channels":[{"id":"CN7G55J00","name":"general","is_channel":true,"created":1568143383,"is_archived":false,"is_general":true,"unlinked":0,"creator":"UN9NG04TG","name_normalized":"general","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UN9C6R7EK","UN9NG04TG"],"topic":{"value":"Company-wide + string: '{"ok":true,"channels":[{"id":"CMW2GGWN7","name":"slack-cli","is_channel":true,"created":1568143384,"is_archived":false,"is_general":false,"unlinked":0,"creator":"UN9NG04TG","name_normalized":"slack-cli","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UN9C6R7EK","UN9NG04TG"],"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"Learning + how to play with APIs","creator":"UN9NG04TG","last_set":1568240342},"previous_names":[],"num_members":2},{"id":"CN7G55J00","name":"general","is_channel":true,"created":1568143383,"is_archived":false,"is_general":true,"unlinked":0,"creator":"UN9NG04TG","name_normalized":"general","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UN9C6R7EK","UN9NG04TG"],"topic":{"value":"Company-wide announcements and work-based matters","creator":"UN9NG04TG","last_set":1568143383},"purpose":{"value":"This channel is for workspace-wide communication and announcements. All members are in this channel.","creator":"UN9NG04TG","last_set":1568143383},"previous_names":[],"num_members":2},{"id":"CN9NG0YUE","name":"random","is_channel":true,"created":1568143383,"is_archived":false,"is_general":false,"unlinked":0,"creator":"UN9NG04TG","name_normalized":"random","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UN9C6R7EK","UN9NG04TG"],"topic":{"value":"Non-work banter and water cooler conversation","creator":"UN9NG04TG","last_set":1568143383},"purpose":{"value":"A place for non-work-related flimflam, faffing, hodge-podge or jibber-jabber - you''d prefer to keep out of more focused work-related channels.","creator":"UN9NG04TG","last_set":1568143383},"previous_names":[],"num_members":2},{"id":"CMW2GGWN7","name":"slack-cli","is_channel":true,"created":1568143384,"is_archived":false,"is_general":false,"unlinked":0,"creator":"UN9NG04TG","name_normalized":"slack-cli","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UN9C6R7EK","UN9NG04TG"],"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"","creator":"","last_set":0},"previous_names":[],"num_members":2}]}' + you''d prefer to keep out of more focused work-related channels.","creator":"UN9NG04TG","last_set":1568143383},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' http_version: - recorded_at: Wed, 11 Sep 2019 20:56:38 GMT + recorded_at: Wed, 11 Sep 2019 22:21:18 GMT recorded_with: VCR 5.0.0 diff --git a/test/cassettes/list_users.yml b/test/cassettes/list_users.yml index 8600be67..cddf38e6 100644 --- a/test/cassettes/list_users.yml +++ b/test/cassettes/list_users.yml @@ -25,15 +25,15 @@ http_interactions: Connection: - keep-alive Date: - - Wed, 11 Sep 2019 20:56:38 GMT + - Wed, 11 Sep 2019 22:21:17 GMT Server: - Apache X-Content-Type-Options: - nosniff X-Slack-Req-Id: - - ae996111-7e5c-4ebf-9984-8597be43d85e + - '03495af8-4728-4eb2-9050-04e21309ac5a' X-Oauth-Scopes: - - identify,read,post,client,apps,admin + - identify,channels:read,users:read,chat:write:bot Expires: - Mon, 26 Jul 1997 05:00:00 GMT Cache-Control: @@ -43,7 +43,7 @@ http_interactions: X-Xss-Protection: - '0' X-Accepted-Oauth-Scopes: - - users:read,read + - users:read Vary: - Accept-Encoding Pragma: @@ -57,22 +57,22 @@ http_interactions: Access-Control-Allow-Origin: - "*" X-Via: - - haproxy-www-iuw2 + - haproxy-www-abbx X-Cache: - Miss from cloudfront Via: - - 1.1 adc2002956acc4d61bfbf3b973fdf247.cloudfront.net (CloudFront) + - 1.1 72f0ac9702110cafbb646d71a297e2c7.cloudfront.net (CloudFront) X-Amz-Cf-Pop: - - SEA19-C1 + - SEA19 X-Amz-Cf-Id: - - oQ669cDi6QAHIZcS5nguy7M7URmJ4ImD4TQIRp3X4X7DhYebHSYzqw== + - wuimShfsPNucXt4Z_rsoGlGBowHLdUaOtCPMIvq_FUfrLtTia0Zt3w== body: encoding: ASCII-8BIT - string: '{"ok":true,"members":[{"id":"UN9C6R7EK","team_id":"TMW2GFQAF","name":"davenport.paige","deleted":false,"color":"4bbe2e","real_name":"Paige","tz":"America\/Los_Angeles","tz_label":"Pacific - Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Paige","real_name_normalized":"Paige","display_name":"Paige","display_name_normalized":"Paige","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g68b577a7f23","email":"davenport.paige@outlook.com","image_24":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-512.png","status_text_canonical":"","team":"TMW2GFQAF"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568143450,"has_2fa":false},{"id":"UN9NG04TG","team_id":"TMW2GFQAF","name":"angele.zam","deleted":false,"color":"9f69e7","real_name":"Angele + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"TMW2GFQAF","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":null,"tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Slackbot","real_name_normalized":"Slackbot","display_name":"Slackbot","display_name_normalized":"Slackbot","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"sv41d8cd98f0","always_active":true,"first_name":"slackbot","last_name":"","image_24":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png","image_32":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png","image_192":"https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png","image_512":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png","status_text_canonical":"","team":"TMW2GFQAF"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":0},{"id":"UN9C6R7EK","team_id":"TMW2GFQAF","name":"davenport.paige","deleted":false,"color":"4bbe2e","real_name":"Paige","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Paige","real_name_normalized":"Paige","display_name":"Paige","display_name_normalized":"Paige","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g68b577a7f23","image_24":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-512.png","status_text_canonical":"","team":"TMW2GFQAF"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568143450,"has_2fa":false},{"id":"UN9NG04TG","team_id":"TMW2GFQAF","name":"angele.zam","deleted":false,"color":"9f69e7","real_name":"Angele Zamarron","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Angele - Zamarron","real_name_normalized":"Angele Zamarron","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gee46bbc96e3","email":"angele.zam@gmail.com","first_name":"Angele","last_name":"Zamarron","image_24":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-512.png","status_text_canonical":"","team":"TMW2GFQAF"},"is_admin":true,"is_owner":true,"is_primary_owner":true,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568221139,"has_2fa":false},{"id":"USLACKBOT","team_id":"TMW2GFQAF","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":null,"tz_label":"Pacific - Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Slackbot","real_name_normalized":"Slackbot","display_name":"Slackbot","display_name_normalized":"Slackbot","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"sv41d8cd98f0","always_active":true,"first_name":"slackbot","last_name":"","image_24":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png","image_32":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png","image_192":"https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png","image_512":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png","status_text_canonical":"","team":"TMW2GFQAF"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":0}],"cache_ts":1568235398}' + Zamarron","real_name_normalized":"Angele Zamarron","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gee46bbc96e3","first_name":"Angele","last_name":"Zamarron","image_24":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-512.png","status_text_canonical":"","team":"TMW2GFQAF"},"is_admin":true,"is_owner":true,"is_primary_owner":true,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568221139}],"cache_ts":1568240477,"response_metadata":{"next_cursor":""}}' http_version: - recorded_at: Wed, 11 Sep 2019 20:56:39 GMT + recorded_at: Wed, 11 Sep 2019 22:21:17 GMT recorded_with: VCR 5.0.0 diff --git a/test/cassettes/new_workspace.yml b/test/cassettes/new_workspace.yml index 98e4218c..ea5b1da2 100644 --- a/test/cassettes/new_workspace.yml +++ b/test/cassettes/new_workspace.yml @@ -25,15 +25,15 @@ http_interactions: Connection: - keep-alive Date: - - Wed, 11 Sep 2019 20:56:38 GMT + - Wed, 11 Sep 2019 22:21:18 GMT Server: - Apache X-Content-Type-Options: - nosniff X-Slack-Req-Id: - - 16a8e857-55d3-4660-b5da-445e933fe5d5 + - 56caa364-bbdb-4253-82df-802f24025077 X-Oauth-Scopes: - - identify,read,post,client,apps,admin + - identify,channels:read,users:read,chat:write:bot Expires: - Mon, 26 Jul 1997 05:00:00 GMT Cache-Control: @@ -43,7 +43,7 @@ http_interactions: X-Xss-Protection: - '0' X-Accepted-Oauth-Scopes: - - users:read,read + - users:read Vary: - Accept-Encoding Pragma: @@ -57,24 +57,24 @@ http_interactions: Access-Control-Allow-Origin: - "*" X-Via: - - haproxy-www-vdna + - haproxy-www-zrg4 X-Cache: - Miss from cloudfront Via: - - 1.1 10b37ec1ede3e33f11dd42b87558cd1f.cloudfront.net (CloudFront) + - 1.1 2dc84924ce70e874a873764fe1415858.cloudfront.net (CloudFront) X-Amz-Cf-Pop: - - SEA19-C1 + - SEA19 X-Amz-Cf-Id: - - RHkRsdMbUmHodVxxb5AK8JvobKCNvypc2veIRMiqYmB5YI9ECsmwMQ== + - 8PTFc2n9hlaUQ58SSl7yaoH1xonhhP217wsYQ25Cd92rbfFmt_itIw== body: encoding: ASCII-8BIT - string: '{"ok":true,"members":[{"id":"UN9C6R7EK","team_id":"TMW2GFQAF","name":"davenport.paige","deleted":false,"color":"4bbe2e","real_name":"Paige","tz":"America\/Los_Angeles","tz_label":"Pacific - Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Paige","real_name_normalized":"Paige","display_name":"Paige","display_name_normalized":"Paige","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g68b577a7f23","email":"davenport.paige@outlook.com","image_24":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-512.png","status_text_canonical":"","team":"TMW2GFQAF"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568143450,"has_2fa":false},{"id":"UN9NG04TG","team_id":"TMW2GFQAF","name":"angele.zam","deleted":false,"color":"9f69e7","real_name":"Angele + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"TMW2GFQAF","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":null,"tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Slackbot","real_name_normalized":"Slackbot","display_name":"Slackbot","display_name_normalized":"Slackbot","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"sv41d8cd98f0","always_active":true,"first_name":"slackbot","last_name":"","image_24":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png","image_32":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png","image_192":"https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png","image_512":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png","status_text_canonical":"","team":"TMW2GFQAF"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":0},{"id":"UN9C6R7EK","team_id":"TMW2GFQAF","name":"davenport.paige","deleted":false,"color":"4bbe2e","real_name":"Paige","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Paige","real_name_normalized":"Paige","display_name":"Paige","display_name_normalized":"Paige","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g68b577a7f23","image_24":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-512.png","status_text_canonical":"","team":"TMW2GFQAF"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568143450,"has_2fa":false},{"id":"UN9NG04TG","team_id":"TMW2GFQAF","name":"angele.zam","deleted":false,"color":"9f69e7","real_name":"Angele Zamarron","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Angele - Zamarron","real_name_normalized":"Angele Zamarron","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gee46bbc96e3","email":"angele.zam@gmail.com","first_name":"Angele","last_name":"Zamarron","image_24":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-512.png","status_text_canonical":"","team":"TMW2GFQAF"},"is_admin":true,"is_owner":true,"is_primary_owner":true,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568221139,"has_2fa":false},{"id":"USLACKBOT","team_id":"TMW2GFQAF","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":null,"tz_label":"Pacific - Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Slackbot","real_name_normalized":"Slackbot","display_name":"Slackbot","display_name_normalized":"Slackbot","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"sv41d8cd98f0","always_active":true,"first_name":"slackbot","last_name":"","image_24":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png","image_32":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png","image_192":"https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png","image_512":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png","status_text_canonical":"","team":"TMW2GFQAF"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":0}],"cache_ts":1568235398}' + Zamarron","real_name_normalized":"Angele Zamarron","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gee46bbc96e3","first_name":"Angele","last_name":"Zamarron","image_24":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-512.png","status_text_canonical":"","team":"TMW2GFQAF"},"is_admin":true,"is_owner":true,"is_primary_owner":true,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568221139}],"cache_ts":1568240478,"response_metadata":{"next_cursor":""}}' http_version: - recorded_at: Wed, 11 Sep 2019 20:56:38 GMT + recorded_at: Wed, 11 Sep 2019 22:21:18 GMT - request: method: get uri: https://slack.com/api/channels.list?token= @@ -96,19 +96,19 @@ http_interactions: Content-Type: - application/json; charset=utf-8 Content-Length: - - '527' + - '585' Connection: - keep-alive Date: - - Wed, 11 Sep 2019 20:56:38 GMT + - Wed, 11 Sep 2019 22:21:18 GMT Server: - Apache X-Content-Type-Options: - nosniff X-Slack-Req-Id: - - f2b8bfca-95ee-4d19-a983-a5bc16fa0292 + - c3e0d2b4-f1d4-49c9-83f8-7ada7ce9fc12 X-Oauth-Scopes: - - identify,read,post,client,apps,admin + - identify,channels:read,users:read,chat:write:bot Expires: - Mon, 26 Jul 1997 05:00:00 GMT Cache-Control: @@ -118,7 +118,7 @@ http_interactions: X-Xss-Protection: - '0' X-Accepted-Oauth-Scopes: - - channels:read,read + - channels:read Vary: - Accept-Encoding Pragma: @@ -132,24 +132,25 @@ http_interactions: Access-Control-Allow-Origin: - "*" X-Via: - - haproxy-www-nvih + - haproxy-www-5t66 X-Cache: - Miss from cloudfront Via: - - 1.1 27a84054de24e45f952ea4056a821764.cloudfront.net (CloudFront) + - 1.1 d9a3481018b2f1931201627713f68e77.cloudfront.net (CloudFront) X-Amz-Cf-Pop: - - SEA19-C1 + - SEA19 X-Amz-Cf-Id: - - i81pOnjCiSq1zF0YPuRGt0wEnZ-akW8ddf3zFVIeM2zY9BMLoCjELA== + - YPPodD1kozMF7uPYjQYFOku7eC_Oo1oWBY3NZHLdR3ooB4sceDVHhA== body: encoding: ASCII-8BIT - string: '{"ok":true,"channels":[{"id":"CN7G55J00","name":"general","is_channel":true,"created":1568143383,"is_archived":false,"is_general":true,"unlinked":0,"creator":"UN9NG04TG","name_normalized":"general","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UN9C6R7EK","UN9NG04TG"],"topic":{"value":"Company-wide + string: '{"ok":true,"channels":[{"id":"CMW2GGWN7","name":"slack-cli","is_channel":true,"created":1568143384,"is_archived":false,"is_general":false,"unlinked":0,"creator":"UN9NG04TG","name_normalized":"slack-cli","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UN9C6R7EK","UN9NG04TG"],"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"Learning + how to play with APIs","creator":"UN9NG04TG","last_set":1568240342},"previous_names":[],"num_members":2},{"id":"CN7G55J00","name":"general","is_channel":true,"created":1568143383,"is_archived":false,"is_general":true,"unlinked":0,"creator":"UN9NG04TG","name_normalized":"general","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UN9C6R7EK","UN9NG04TG"],"topic":{"value":"Company-wide announcements and work-based matters","creator":"UN9NG04TG","last_set":1568143383},"purpose":{"value":"This channel is for workspace-wide communication and announcements. All members are in this channel.","creator":"UN9NG04TG","last_set":1568143383},"previous_names":[],"num_members":2},{"id":"CN9NG0YUE","name":"random","is_channel":true,"created":1568143383,"is_archived":false,"is_general":false,"unlinked":0,"creator":"UN9NG04TG","name_normalized":"random","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UN9C6R7EK","UN9NG04TG"],"topic":{"value":"Non-work banter and water cooler conversation","creator":"UN9NG04TG","last_set":1568143383},"purpose":{"value":"A place for non-work-related flimflam, faffing, hodge-podge or jibber-jabber - you''d prefer to keep out of more focused work-related channels.","creator":"UN9NG04TG","last_set":1568143383},"previous_names":[],"num_members":2},{"id":"CMW2GGWN7","name":"slack-cli","is_channel":true,"created":1568143384,"is_archived":false,"is_general":false,"unlinked":0,"creator":"UN9NG04TG","name_normalized":"slack-cli","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UN9C6R7EK","UN9NG04TG"],"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"","creator":"","last_set":0},"previous_names":[],"num_members":2}]}' + you''d prefer to keep out of more focused work-related channels.","creator":"UN9NG04TG","last_set":1568143383},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' http_version: - recorded_at: Wed, 11 Sep 2019 20:56:38 GMT + recorded_at: Wed, 11 Sep 2019 22:21:18 GMT recorded_with: VCR 5.0.0 From e2d73e7e569ae144005df65ebc7a4561f2210a6b Mon Sep 17 00:00:00 2001 From: Paige Davenport Date: Thu, 12 Sep 2019 08:23:10 -0700 Subject: [PATCH 17/32] Added test for find user method. --- lib/recipient.rb | 11 +++++++++++ lib/user.rb | 3 +++ lib/workspace.rb | 19 +++++++++++++++++++ test/workspace_test.rb | 22 ++++++++++++++++------ 4 files changed, 49 insertions(+), 6 deletions(-) diff --git a/lib/recipient.rb b/lib/recipient.rb index 1c699b80..c2a9e58b 100644 --- a/lib/recipient.rb +++ b/lib/recipient.rb @@ -19,5 +19,16 @@ def self.get(url) return response end + # def send_message(message) + # end + + def details + raise NotImplementedError.new("Details should be implemented in child class") + end + + def self.list + raise NotImplementedError.new("Self.list should be implemented in child class") + end + end end diff --git a/lib/user.rb b/lib/user.rb index 4f608645..c4ce6935 100644 --- a/lib/user.rb +++ b/lib/user.rb @@ -24,6 +24,9 @@ def self.list return users end + + # def details + # end end end diff --git a/lib/workspace.rb b/lib/workspace.rb index 43173ae5..915d73bb 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -11,5 +11,24 @@ def initialize @channels = SlackCLI::Channel.list @selected = nil end + + # def select_user(user) + # find user by id or name + # add User to selected + # end + + #def find_user(user_name_or_id) + #take in id or name + #end + + # def select_channel + # end + + + # def show_details + # end + + # def send_message + # end end end diff --git a/test/workspace_test.rb b/test/workspace_test.rb index 91ec0ad8..438b510a 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -1,12 +1,13 @@ require_relative 'test_helper' describe "Workspace" do - describe "initialize" do - before do - VCR.use_cassette("new_workspace") do - @new_workspace = SlackCLI::Workspace.new - end + before do + VCR.use_cassette("new_workspace") do + @new_workspace = SlackCLI::Workspace.new end + end + + describe "initialize" do it "can initialize" do expect(@new_workspace).must_be_instance_of SlackCLI::Workspace end @@ -14,8 +15,17 @@ it "stores instances of User in @users" do expect(@new_workspace.users.first).must_be_instance_of SlackCLI::User end + end + + describe "find_user" do + it "finds a User given their Slack Id or Name" do + id = "USLACKBOT" + user = @new_workspace.find_user(id) + expect(user).must_be_instance_of SlackCLI::User + expect(user.slack_id).must_equal id + end end - + end From b13fa09cd49769773d9f8c68a7eef0e06625ae5a Mon Sep 17 00:00:00 2001 From: geli-gel Date: Thu, 12 Sep 2019 08:59:58 -0700 Subject: [PATCH 18/32] added find_instance method and added tests for finding users by name or id --- lib/workspace.rb | 11 ++++++++--- test/workspace_test.rb | 34 ++++++++++++++++++++++++++++++---- 2 files changed, 38 insertions(+), 7 deletions(-) diff --git a/lib/workspace.rb b/lib/workspace.rb index 915d73bb..c7d89621 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -17,9 +17,14 @@ def initialize # add User to selected # end - #def find_user(user_name_or_id) - #take in id or name - #end + def find_instance(recipient_list, name_or_id) + instance = recipient_list.find do |recipient| + recipient.name.downcase == name_or_id.downcase || + recipient.slack_id.downcase == name_or_id.downcase + end + + return instance + end # def select_channel # end diff --git a/test/workspace_test.rb b/test/workspace_test.rb index 438b510a..d31a2ee3 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -17,14 +17,40 @@ end end - describe "find_user" do + describe "find_instance" do it "finds a User given their Slack Id or Name" do id = "USLACKBOT" + user_1 = @new_workspace.find_instance(@new_workspace.users, id) - user = @new_workspace.find_user(id) + name = "Slackbot" + user_2 = @new_workspace.find_instance(@new_workspace.users, name) - expect(user).must_be_instance_of SlackCLI::User - expect(user.slack_id).must_equal id + expect(user_1).must_be_instance_of SlackCLI::User + expect(user_1.slack_id.downcase).must_equal id.downcase + + expect(user_2).must_be_instance_of SlackCLI::User + expect(user_2.name.downcase).must_equal name.downcase + end + + it "finds a User even if the case doesn't match" do + id = "uslackBOT" + user_1 = @new_workspace.find_instance(@new_workspace.users, id) + + name = "sLacKbOt" + user_2 = @new_workspace.find_instance(@new_workspace.users, name) + + expect(user_1).must_be_instance_of SlackCLI::User + expect(user_1.slack_id.downcase).must_equal id.downcase + + expect(user_2).must_be_instance_of SlackCLI::User + expect(user_2.name.downcase).must_equal name.downcase + end + + it "returns nil if user is not found" do + name = "mr. slackbot" + user = @new_workspace.find_instance(@new_workspace.users, name) + + expect(user).must_be_nil end end From df4857eb309067676b4e15ff973e7e780579aa13 Mon Sep 17 00:00:00 2001 From: Paige Davenport Date: Thu, 12 Sep 2019 13:16:51 -0700 Subject: [PATCH 19/32] Added tests to find a channel with the find_recipient method. --- test/workspace_test.rb | 43 +++++++++++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/test/workspace_test.rb b/test/workspace_test.rb index d31a2ee3..e57c51e2 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -6,12 +6,12 @@ @new_workspace = SlackCLI::Workspace.new end end - + describe "initialize" do it "can initialize" do expect(@new_workspace).must_be_instance_of SlackCLI::Workspace end - + it "stores instances of User in @users" do expect(@new_workspace.users.first).must_be_instance_of SlackCLI::User end @@ -21,37 +21,54 @@ it "finds a User given their Slack Id or Name" do id = "USLACKBOT" user_1 = @new_workspace.find_instance(@new_workspace.users, id) - + name = "Slackbot" user_2 = @new_workspace.find_instance(@new_workspace.users, name) - + expect(user_1).must_be_instance_of SlackCLI::User expect(user_1.slack_id.downcase).must_equal id.downcase - + expect(user_2).must_be_instance_of SlackCLI::User expect(user_2.name.downcase).must_equal name.downcase end - + it "finds a User even if the case doesn't match" do id = "uslackBOT" user_1 = @new_workspace.find_instance(@new_workspace.users, id) - + name = "sLacKbOt" user_2 = @new_workspace.find_instance(@new_workspace.users, name) - + expect(user_1).must_be_instance_of SlackCLI::User expect(user_1.slack_id.downcase).must_equal id.downcase - + expect(user_2).must_be_instance_of SlackCLI::User expect(user_2.name.downcase).must_equal name.downcase end - - it "returns nil if user is not found" do + + it "returns nil if user or channel is not found" do name = "mr. slackbot" + channel_name = "not a channel" user = @new_workspace.find_instance(@new_workspace.users, name) - + channel = @new_workspace.find_instance(@new_workspace.channels, channel_name) + expect(user).must_be_nil + expect(channel).must_be_nil + end + + it "finds a channel given the channel name or id" do + id = "CN9NG0YUE" + channel_1 = @new_workspace.find_instance(@new_workspace.channels, id) + + name = "random" + channel_2 = @new_workspace.find_instance(@new_workspace.channels, name) + + expect(channel_1).must_be_instance_of SlackCLI::Channel + expect(channel_1.slack_id.downcase).must_equal id.downcase + + expect(channel_2).must_be_instance_of SlackCLI::Channel + expect(channel_2.name.downcase).must_equal name.downcase end end - + end From f9cff449da16957c9abc77990508164508da3ac1 Mon Sep 17 00:00:00 2001 From: Paige Davenport Date: Thu, 12 Sep 2019 13:50:44 -0700 Subject: [PATCH 20/32] Added methods and tests to select user and select channel. --- lib/workspace.rb | 30 ++++++++++++++++++------------ test/workspace_test.rb | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 12 deletions(-) diff --git a/lib/workspace.rb b/lib/workspace.rb index c7d89621..d274904e 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -5,34 +5,40 @@ module SlackCLI class Workspace attr_reader :users, :channels attr_accessor :selected - + def initialize @users = SlackCLI::User.list @channels = SlackCLI::Channel.list @selected = nil end - # def select_user(user) - # find user by id or name - # add User to selected - # end - def find_instance(recipient_list, name_or_id) instance = recipient_list.find do |recipient| recipient.name.downcase == name_or_id.downcase || recipient.slack_id.downcase == name_or_id.downcase end - + return instance end + + def select_user(name_or_id) + user = find_instance(users, name_or_id) + @selected = user if user != nil - # def select_channel - # end - - + return @selected + end + + def select_channel(name_or_id) + channel = find_instance(channels, name_or_id) + @selected = channel if channel != nil + + return @selected + end + + # def show_details # end - + # def send_message # end end diff --git a/test/workspace_test.rb b/test/workspace_test.rb index e57c51e2..02baf3f2 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -71,4 +71,36 @@ end end + describe "select_user" do + before do + @new_workspace.selected == nil + end + + it "assigns a User to selected" do + before_selected = @new_workspace.selected + user_1_name = "Slackbot" + + selection = @new_workspace.select_user(user_1_name) + + expect(before_selected).must_be_nil + expect(@new_workspace.selected).must_equal selection + end + end + + describe "select_channel" do + before do + @new_workspace.selected == nil + end + + it "assigns a Channel to selected" do + before_selected = @new_workspace.selected + channel_1_name = "random" + + selection = @new_workspace.select_channel(channel_1_name) + + expect(before_selected).must_be_nil + expect(@new_workspace.selected).must_equal selection + end + end + end From c1f0c8a650a938cf3f9f8d9ec429bed17d7aca05 Mon Sep 17 00:00:00 2001 From: Paige Davenport Date: Thu, 12 Sep 2019 14:00:26 -0700 Subject: [PATCH 21/32] Began writing API error handling. --- lib/recipient.rb | 5 +++++ lib/user.rb | 12 ++++++------ test/recipient_test.rb | 9 +++++++-- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/lib/recipient.rb b/lib/recipient.rb index c2a9e58b..e963dd32 100644 --- a/lib/recipient.rb +++ b/lib/recipient.rb @@ -4,6 +4,7 @@ Dotenv.load module SlackCLI + class SlackApiError < StandardError; end class Recipient attr_reader :slack_id, :name @@ -15,6 +16,10 @@ def initialize(slack_id:, name:) def self.get(url) key = ENV["API_TOKEN"] response = HTTParty.get(url, query: {token: key }) + + if response.include? response["error"] + raise SlackCLI::SlackApiError + end return response end diff --git a/lib/user.rb b/lib/user.rb index c4ce6935..ac314996 100644 --- a/lib/user.rb +++ b/lib/user.rb @@ -5,26 +5,26 @@ module SlackCLI class User < Recipient attr_reader :real_name - + def initialize(slack_id:, name:, real_name:) super(slack_id: slack_id, name: name) @real_name = real_name end - + def self.list response = self.get("https://slack.com/api/users.list") - + users = response["members"].map do |member| slack_id = member["id"] name = member["name"] real_name = member["real_name"] - + SlackCLI::User.new(slack_id: slack_id, name: name, real_name: real_name) end - + return users end - + # def details # end diff --git a/test/recipient_test.rb b/test/recipient_test.rb index d3d0f741..23bcfc60 100644 --- a/test/recipient_test.rb +++ b/test/recipient_test.rb @@ -10,9 +10,14 @@ expect(new_recipient).must_be_instance_of SlackCLI::Recipient end + end - - + describe "self.get" do + it "raises an error if the API returns an error response" do + VCR.use_cassette("recipient_gets") do + response = + end + end end end From bf8a8ade485d93b65bcdd722f29d21bb23dd1aae Mon Sep 17 00:00:00 2001 From: geli-gel Date: Thu, 12 Sep 2019 15:23:14 -0700 Subject: [PATCH 22/32] updated Recipient self.gets to raise SlackApiError on errored API response, added test with cassette created with bad token --- lib/recipient.rb | 3 +- test/cassettes/recipient_gets_error.yml | 64 +++++++++++++++++++++++++ test/recipient_test.rb | 7 ++- 3 files changed, 70 insertions(+), 4 deletions(-) create mode 100644 test/cassettes/recipient_gets_error.yml diff --git a/lib/recipient.rb b/lib/recipient.rb index e963dd32..da9eb633 100644 --- a/lib/recipient.rb +++ b/lib/recipient.rb @@ -16,8 +16,7 @@ def initialize(slack_id:, name:) def self.get(url) key = ENV["API_TOKEN"] response = HTTParty.get(url, query: {token: key }) - - if response.include? response["error"] + if response.keys.include? "error" || response["ok"] == false raise SlackCLI::SlackApiError end diff --git a/test/cassettes/recipient_gets_error.yml b/test/cassettes/recipient_gets_error.yml new file mode 100644 index 00000000..36c31c96 --- /dev/null +++ b/test/cassettes/recipient_gets_error.yml @@ -0,0 +1,64 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/users.list?token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '55' + Connection: + - keep-alive + Date: + - Thu, 12 Sep 2019 22:16:25 GMT + Server: + - Apache + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - cd2823c7-2ea0-424b-9c5a-d963cc8d77ee + X-Xss-Protection: + - '0' + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-xqej + X-Cache: + - Miss from cloudfront + Via: + - 1.1 6172bb1a5d00a3b06ae3700570ebe117.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - Rmav1bUO6rAla9n3GnYKPMZBRBKn_wTtkm5fZenExaeNTOkCz4FiXw== + body: + encoding: ASCII-8BIT + string: '{"ok":false,"error":"invalid_auth"}' + http_version: + recorded_at: Thu, 12 Sep 2019 22:16:25 GMT +recorded_with: VCR 5.0.0 diff --git a/test/recipient_test.rb b/test/recipient_test.rb index 23bcfc60..a49ef756 100644 --- a/test/recipient_test.rb +++ b/test/recipient_test.rb @@ -14,8 +14,11 @@ describe "self.get" do it "raises an error if the API returns an error response" do - VCR.use_cassette("recipient_gets") do - response = + # "recipient_gets" cassette was created with invalid token + VCR.use_cassette("recipient_gets_error") do + assert_raises(SlackCLI::SlackApiError) { + SlackCLI::Recipient.get("https://slack.com/api/users.list") + } end end end From c317d0dffca8c0fe8af453a9df81ab68402696f8 Mon Sep 17 00:00:00 2001 From: geli-gel Date: Fri, 13 Sep 2019 11:43:42 -0700 Subject: [PATCH 23/32] added send_message to Recipient and added tests --- lib/recipient.rb | 21 +- test/cassettes/recipient_send_message.yml | 431 ++++++++++++++++++++++ test/recipient_test.rb | 28 ++ 3 files changed, 478 insertions(+), 2 deletions(-) create mode 100644 test/cassettes/recipient_send_message.yml diff --git a/lib/recipient.rb b/lib/recipient.rb index da9eb633..115b4768 100644 --- a/lib/recipient.rb +++ b/lib/recipient.rb @@ -23,8 +23,25 @@ def self.get(url) return response end - # def send_message(message) - # end + def send_message(message) + # pull out key to be @key? + key = ENV["API_TOKEN"] + response = HTTParty.post( + "https://slack.com/api/chat.postMessage", + headers: {'Content-Type' => 'application/x-www-form-urlencoded'}, + body: { + "token": key, + "channel": @slack_id, + "text": message + } + ) + + if response.keys.include? "error" || response["ok"] == false + raise SlackCLI::SlackApiError + else + return true + end + end def details raise NotImplementedError.new("Details should be implemented in child class") diff --git a/test/cassettes/recipient_send_message.yml b/test/cassettes/recipient_send_message.yml new file mode 100644 index 00000000..2b9c210f --- /dev/null +++ b/test/cassettes/recipient_send_message.yml @@ -0,0 +1,431 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/users.list?token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '939' + Connection: + - keep-alive + Date: + - Fri, 13 Sep 2019 18:33:07 GMT + Server: + - Apache + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - '08a7c5a0-ca97-440f-a3c1-db5dc3931a25' + X-Oauth-Scopes: + - identify,read,post,client,apps,admin + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - users:read,read + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-fc14 + X-Cache: + - Miss from cloudfront + Via: + - 1.1 bf3ec4bcb6f4f29d898c3c4e0f95a185.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - HIO51-C1 + X-Amz-Cf-Id: + - Q3B-P3oxrRB-uyAe1r2ecGkJ6AUseQP5vJqQQ23eK0lwdMNoY57s8w== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":[{"id":"UN9C6R7EK","team_id":"TMW2GFQAF","name":"davenport.paige","deleted":false,"color":"4bbe2e","real_name":"Paige","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Paige","real_name_normalized":"Paige","display_name":"Paige","display_name_normalized":"Paige","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g68b577a7f23","email":"davenport.paige@outlook.com","image_24":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/68b577a7f23086761e086b6d295e3c23.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0002-512.png","status_text_canonical":"","team":"TMW2GFQAF"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568143450,"has_2fa":false},{"id":"UN9NG04TG","team_id":"TMW2GFQAF","name":"angele.zam","deleted":false,"color":"9f69e7","real_name":"Angele + Zamarron","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Angele + Zamarron","real_name_normalized":"Angele Zamarron","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gee46bbc96e3","email":"angele.zam@gmail.com","first_name":"Angele","last_name":"Zamarron","image_24":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/ee46bbc96e30be4133113950b023753e.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0020-512.png","status_text_canonical":"","team":"TMW2GFQAF"},"is_admin":true,"is_owner":true,"is_primary_owner":true,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568221139,"has_2fa":false},{"id":"USLACKBOT","team_id":"TMW2GFQAF","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":null,"tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Slackbot","real_name_normalized":"Slackbot","display_name":"Slackbot","display_name_normalized":"Slackbot","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"sv41d8cd98f0","always_active":true,"first_name":"slackbot","last_name":"","image_24":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png","image_32":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png","image_192":"https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png","image_512":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png","status_text_canonical":"","team":"TMW2GFQAF"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":0}],"cache_ts":1568399587}' + http_version: + recorded_at: Fri, 13 Sep 2019 18:33:07 GMT +- request: + method: get + uri: https://slack.com/api/channels.list?token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '556' + Connection: + - keep-alive + Date: + - Fri, 13 Sep 2019 18:33:07 GMT + Server: + - Apache + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - bb76e184-8d80-42b1-88ff-ba93f789a489 + X-Oauth-Scopes: + - identify,read,post,client,apps,admin + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - channels:read,read + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-lqa3 + X-Cache: + - Miss from cloudfront + Via: + - 1.1 48b1d9f5c5a47a0b424a9637eb513cee.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - HIO51-C1 + X-Amz-Cf-Id: + - 1sK0EV59sv54FFJ4wxFaWFEIOCf8BYspwJfgan-BMduXYFOQOlBRMQ== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channels":[{"id":"CN7G55J00","name":"general","is_channel":true,"created":1568143383,"is_archived":false,"is_general":true,"unlinked":0,"creator":"UN9NG04TG","name_normalized":"general","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UN9C6R7EK","UN9NG04TG"],"topic":{"value":"Company-wide + announcements and work-based matters","creator":"UN9NG04TG","last_set":1568143383},"purpose":{"value":"This + channel is for workspace-wide communication and announcements. All members + are in this channel.","creator":"UN9NG04TG","last_set":1568143383},"previous_names":[],"num_members":2},{"id":"CN9NG0YUE","name":"random","is_channel":true,"created":1568143383,"is_archived":false,"is_general":false,"unlinked":0,"creator":"UN9NG04TG","name_normalized":"random","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UN9C6R7EK","UN9NG04TG"],"topic":{"value":"Non-work + banter and water cooler conversation","creator":"UN9NG04TG","last_set":1568143383},"purpose":{"value":"A + place for non-work-related flimflam, faffing, hodge-podge or jibber-jabber + you''d prefer to keep out of more focused work-related channels.","creator":"UN9NG04TG","last_set":1568143383},"previous_names":[],"num_members":2},{"id":"CMW2GGWN7","name":"slack-cli","is_channel":true,"created":1568143384,"is_archived":false,"is_general":false,"unlinked":0,"creator":"UN9NG04TG","name_normalized":"slack-cli","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"members":["UN9C6R7EK","UN9NG04TG"],"topic":{"value":"A + topic","creator":"UN9NG04TG","last_set":1568240532},"purpose":{"value":"Learning + how to play with APIs","creator":"UN9NG04TG","last_set":1568240342},"previous_names":[],"num_members":2}]}' + http_version: + recorded_at: Fri, 13 Sep 2019 18:33:07 GMT +- request: + method: post + uri: https://slack.com/api/chat.postMessage + body: + encoding: UTF-8 + string: token=&channel=CN9NG0YUE&text=trying%20to%20send%20from%20recipient_test + headers: + Content-Type: + - application/x-www-form-urlencoded + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Date: + - Fri, 13 Sep 2019 18:33:07 GMT + Server: + - Apache + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - 82442a5f-5f6c-4709-85b6-f6634688d9a2 + X-Oauth-Scopes: + - identify,read,post,client,apps,admin + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - chat:write:bot,post + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-qj5i + X-Cache: + - Miss from cloudfront + Via: + - 1.1 d2bb0dc1233d3ab1747a4a160c14c25b.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - HIO51-C1 + X-Amz-Cf-Id: + - RVB1p-_GZR8P70j_-SloT2GZiD03w2BNnXJEKWRvkaZgYpKVOnuHrA== + body: + encoding: UTF-8 + string: '{"ok":true,"channel":"CN9NG0YUE","ts":"1568399587.000200","message":{"type":"message","subtype":"bot_message","text":"trying + to send from recipient_test","ts":"1568399587.000200","username":"Slack API + Tester","bot_id":"BMXAJ972P"}}' + http_version: + recorded_at: Fri, 13 Sep 2019 18:33:07 GMT +- request: + method: post + uri: https://slack.com/api/chat.postMessage + body: + encoding: UTF-8 + string: token=&channel=USLACKBOT&text=trying%20to%20send%20from%20recipient_test%20to%20slackbot + headers: + Content-Type: + - application/x-www-form-urlencoded + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Date: + - Fri, 13 Sep 2019 18:34:26 GMT + Server: + - Apache + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - 3fce6fb4-fbd4-4a6b-a08a-c6698f517deb + X-Oauth-Scopes: + - identify,read,post,client,apps,admin + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - chat:write:bot,post + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-wuu0 + X-Cache: + - Miss from cloudfront + Via: + - 1.1 7e81687e34febf53ccb2929005d5ef12.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - HIO51-C1 + X-Amz-Cf-Id: + - 6Nr1PmhBwzgVlmpPv7RRIVtI4YKdR093LZdQbDeKjO5Al8GXEFGeJQ== + body: + encoding: UTF-8 + string: '{"ok":true,"channel":"DN4B8GNRF","ts":"1568399666.000100","message":{"type":"message","subtype":"bot_message","text":"trying + to send from recipient_test to slackbot","ts":"1568399666.000100","username":"Slack + API Tester","bot_id":"BMXAJ972P"}}' + http_version: + recorded_at: Fri, 13 Sep 2019 18:34:26 GMT +- request: + method: post + uri: https://slack.com/api/chat.postMessage + body: + encoding: UTF-8 + string: token=&channel=UN9C6R7EK&text=trying%20to%20send%20from%20recipient_test%20to%20paige + headers: + Content-Type: + - application/x-www-form-urlencoded + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Date: + - Fri, 13 Sep 2019 18:35:29 GMT + Server: + - Apache + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - b6ecd8c4-3e6f-4a17-835f-146d9f808428 + X-Oauth-Scopes: + - identify,read,post,client,apps,admin + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - chat:write:bot,post + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-lcub + X-Cache: + - Miss from cloudfront + Via: + - 1.1 098a28c90e7d4eca5d6cebe57828e74d.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - HIO51-C1 + X-Amz-Cf-Id: + - NOYN1POknjZGNn_QiLDj2ckimDGLhIQfk9qYO5mx5tN-O2jiw4xe2Q== + body: + encoding: UTF-8 + string: '{"ok":true,"channel":"DN7GCE0BF","ts":"1568399729.000100","message":{"type":"message","subtype":"bot_message","text":"trying + to send from recipient_test to paige","ts":"1568399729.000100","username":"Slack + API Tester","bot_id":"BMXAJ972P"}}' + http_version: + recorded_at: Fri, 13 Sep 2019 18:35:29 GMT +- request: + method: post + uri: https://slack.com/api/chat.postMessage + body: + encoding: UTF-8 + string: token=&channel=55555&text=trying%20to%20send%20from%20recipient_test%20to%20nonexistent%20User + headers: + Content-Type: + - application/x-www-form-urlencoded + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Date: + - Fri, 13 Sep 2019 18:42:50 GMT + Server: + - Apache + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - 629faf13-a809-4944-824b-888449f591b7 + X-Oauth-Scopes: + - identify,read,post,client,apps,admin + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - chat:write:bot,post + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-7kp7 + X-Cache: + - Miss from cloudfront + Via: + - 1.1 15e808532464d90b13614947e41d0d22.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - HIO51-C1 + X-Amz-Cf-Id: + - dLupf76HTDqjnSxGV0tSw350Ca2wwfc5g4X7Q5jV1S0yXwVbhOuWuw== + body: + encoding: UTF-8 + string: '{"ok":false,"error":"channel_not_found"}' + http_version: + recorded_at: Fri, 13 Sep 2019 18:42:50 GMT +recorded_with: VCR 5.0.0 diff --git a/test/recipient_test.rb b/test/recipient_test.rb index a49ef756..b9cd5f8f 100644 --- a/test/recipient_test.rb +++ b/test/recipient_test.rb @@ -23,4 +23,32 @@ end end + describe "send_message" do + it "sends a message and returns true if it was successful" do + VCR.use_cassette("recipient_send_message") do + workspace = SlackCLI::Workspace.new + channel_random = workspace.find_instance(workspace.channels, "random") + # slack_id = "CN9NG0YUE" # "random" channel + response = channel_random.send_message("trying to send from recipient_test") + expect(response).must_equal true + + user_slackbot = workspace.find_instance(workspace.users, "slackbot") + response_2 = user_slackbot.send_message("trying to send from recipient_test to slackbot") + expect(response_2).must_equal true + end + end + it "raises an error if message isn't sent" do + VCR.use_cassette("recipient_send_message") do + assert_raises(SlackCLI::SlackApiError) { + fake_user = SlackCLI::User.new( + slack_id: 55555, + name: "fake name", + real_name: "fake real name" + ) + fake_user.send_message("trying to send from recipient_test to nonexistent User") + } + end + end + end + end From 504008ebf63fb64f7b87d55f46e6badd5a429bee Mon Sep 17 00:00:00 2001 From: Paige Davenport Date: Fri, 13 Sep 2019 11:52:29 -0700 Subject: [PATCH 24/32] Added details methods for user and channel. Added show details functionality to workspace and tests. --- lib/channel.rb | 15 ++++++++++++--- lib/user.rb | 8 +++++--- lib/workspace.rb | 6 +++--- test/channel_test.rb | 21 +++++++++++++++++++-- test/user_test.rb | 22 +++++++++++++++++++++- test/workspace_test.rb | 30 +++++++++++++++++++++++++++++- 6 files changed, 89 insertions(+), 13 deletions(-) diff --git a/lib/channel.rb b/lib/channel.rb index 485d09fb..80808e98 100644 --- a/lib/channel.rb +++ b/lib/channel.rb @@ -19,13 +19,22 @@ def self.list topic = channel["topic"]["value"] member_count = channel["members"].length - SlackCLI::Channel.new(slack_id: slack_id, name: name, topic: topic, member_count: member_count) + SlackCLI::Channel.new( + slack_id: slack_id, + name: name, + topic: topic, + member_count: member_count + ) end return channels end - # def details - # end + def details + "Slack ID: #{slack_id}\n + Name: #{name}\n + Topic: #{topic}\n + Member Count: #{member_count}" + end end end diff --git a/lib/user.rb b/lib/user.rb index ac314996..578a77ac 100644 --- a/lib/user.rb +++ b/lib/user.rb @@ -25,8 +25,10 @@ def self.list return users end - # def details - # end - + def details + "Slack ID: #{slack_id}\n + Name: #{name}\n + Real Name: #{real_name}" + end end end diff --git a/lib/workspace.rb b/lib/workspace.rb index d274904e..17ad062c 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -35,9 +35,9 @@ def select_channel(name_or_id) return @selected end - - # def show_details - # end + def show_details + selected ? selected.details : nil + end # def send_message # end diff --git a/test/channel_test.rb b/test/channel_test.rb index f22d94ac..e7d343d0 100644 --- a/test/channel_test.rb +++ b/test/channel_test.rb @@ -18,6 +18,7 @@ expect(new_channel.class < SlackCLI::Recipient).must_equal true end + end describe "self.list" do it "creates a list of all channels" do @@ -27,13 +28,29 @@ expect(channel_list).must_be_instance_of Array expect(channel_list.first).must_be_instance_of SlackCLI::Channel end + end + end + describe "details" do + before do + VCR.use_cassette("list_channels") do + @channel_list = SlackCLI::Channel.list + end end - end + it "returns a string" do + channel_details = @channel_list[2].details + expect(channel_details).must_be_instance_of String + end + it "returns accurate details about the channel" do + channel_details = @channel_list[2].details + expect(channel_details).must_include "CN9NG0YUE" + expect(channel_details).must_include "random" + expect(channel_details).must_include "Non-work banter and water cooler conversation" + expect(channel_details).must_include "2" + end end - end diff --git a/test/user_test.rb b/test/user_test.rb index 7b3da493..7c1cf218 100644 --- a/test/user_test.rb +++ b/test/user_test.rb @@ -26,7 +26,27 @@ expect(users_list.first).must_be_instance_of SlackCLI::User end end - end + describe "details" do + before do + VCR.use_cassette("list_users") do + @users_list = SlackCLI::User.list + end + end + + it "returns a string" do + user_details = @users_list[0].details + + expect(user_details).must_be_instance_of String + end + + it "returns accurate details about the user" do + user_details2 = @users_list[0].details + + expect(user_details2).must_include "USLACKBOT" + expect(user_details2).must_include "slackbot" + expect(user_details2).must_include "Slackbot" + end + end end diff --git a/test/workspace_test.rb b/test/workspace_test.rb index 02baf3f2..5db02840 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -101,6 +101,34 @@ expect(before_selected).must_be_nil expect(@new_workspace.selected).must_equal selection end + + it "reassigns a Channel to selected" do + old_selection = @new_workspace.select_channel("general") + new_selection = @new_workspace.select_channel("random") + + expect(@new_workspace.selected).wont_equal old_selection + expect(@new_workspace.selected.name).must_equal "random" + end + end + + describe "show_details" do + it "returns details for a selected recipient" do + channel_id = "CN9NG0YUE" + user_id = "USLACKBOT" + + @new_workspace.select_channel(channel_id) + details_1 = @new_workspace.show_details + @new_workspace.select_user(user_id) + details_2 = @new_workspace.show_details + + expect(details_1).must_include "random" + expect(details_2).must_include "slackbot" + end + + it "returns nil if no user or channel is selected" do + @new_workspace.selected == nil + + expect(@new_workspace.show_details).must_be_nil + end end - end From 51c83c45919d0946da7ecd4466779161345e55c1 Mon Sep 17 00:00:00 2001 From: geli-gel Date: Fri, 13 Sep 2019 11:56:43 -0700 Subject: [PATCH 25/32] added select_user, select_channel, and send_message to slack.rb --- lib/slack.rb | 64 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 61 insertions(+), 3 deletions(-) diff --git a/lib/slack.rb b/lib/slack.rb index ab18b738..bb6bf412 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -11,7 +11,7 @@ def main puts "\n#{channels_count} channels and #{users_count} users loaded" choice = "" - until choice == "3" || choice == "quit" + until choice == "7" || choice == "quit" puts "\nWhat would you like to do?" menu_options print "Action: " @@ -20,9 +20,23 @@ def main case choice when "1","list users" list_users(workspace) + when "2","list channels" list_channels(workspace) - when "6","quit" + + when "3","select user" + select_user(workspace) + + when "4","select channel" + select_channel(workspace) + + when "5","details" + details(workspace) + + when "6","send message" + send_message(workspace) + + when "7","quit" break else puts "That option does not exist" @@ -39,7 +53,8 @@ def menu_options ["3", "select user"], ["4", "select channel"], ["5", "details"], - ["6","quit"] + ["6", "details"], + ["7","quit"] ] menu_table = Terminal::Table.new :headings => ["#", "Action"], :rows => numbered_options puts menu_table @@ -53,5 +68,48 @@ def list_channels(workspace) tp workspace.channels, :slack_id, :name, :topic, :member_count end +def select_user(workspace) + puts "Select User" + print "Please enter a Username or Slack ID: " + query = gets.chomp.downcase + query_result = workspace.select_user(query) + if query_result == nil + puts "\nUser with Username or Slack ID '#{query}' does not exist." + else + puts "\nUser '#{query_result.name}' selected" + end + return query_result +end + +def select_channel(workspace) + puts "Select Channel" + print "Please enter a Channel Name or Slack ID: " + query = gets.chomp.downcase + query_result = workspace.select_channel(query) + if query_result == nil + puts "\nChannel with Name or Slack ID '#{query}' does not exist." + else + puts "\nChannel '#{query_result.name}' selected" + end + return query_result +end + +def send_message(workspace) + if workspace.selected == nil + puts "\nNo recipient selected to send message to." + return nil + else + recipient = workspace.selected + puts "Send Message to '#{recipient.name}'" + print "Please enter message text: " + message_text = gets.chomp + + message_sent = recipient.send_message(message_text, recipient.slack_id) + + puts "Message Successfully Sent" + end + end + +end main if __FILE__ == $PROGRAM_NAME From 3588db00f55031c12c3545536e42d4cbf86c5809 Mon Sep 17 00:00:00 2001 From: Paige Davenport Date: Fri, 13 Sep 2019 11:57:49 -0700 Subject: [PATCH 26/32] Added details functionality to slack.rb --- lib/slack.rb | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/lib/slack.rb b/lib/slack.rb index ab18b738..b8cc2128 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -15,20 +15,35 @@ def main puts "\nWhat would you like to do?" menu_options print "Action: " + #Make an "ask for input" helper method? choice = gets.chomp.downcase case choice when "1","list users" + puts "\n" list_users(workspace) when "2","list channels" + puts "\n" list_channels(workspace) - when "6","quit" + when "5","details" + if workspace.show_details == nil + puts "\nNo user or channel selected." + else + puts "#{workspace.show_details}" + end + # when "6","send message" + # if workspace.selected != nil + # else "No user or channel (recipient) selected" + # should confirm channel/user selected? + # should do something if no channel/user selected + + when "6","quit" #change to option 7 break else puts "That option does not exist" end end - + puts "Thank you for using the Ada Slack CLI" end @@ -39,7 +54,8 @@ def menu_options ["3", "select user"], ["4", "select channel"], ["5", "details"], - ["6","quit"] + #["6", "send message"], + ["6","quit"] # change to option 7 ] menu_table = Terminal::Table.new :headings => ["#", "Action"], :rows => numbered_options puts menu_table From 43098a4f9c7bbfe248c7b90b60e4f5bba45de704 Mon Sep 17 00:00:00 2001 From: geli-gel Date: Fri, 13 Sep 2019 12:33:16 -0700 Subject: [PATCH 27/32] formatting updates --- lib/channel.rb | 8 ++++---- lib/recipient.rb | 2 +- lib/user.rb | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/channel.rb b/lib/channel.rb index 80808e98..6d0f4389 100644 --- a/lib/channel.rb +++ b/lib/channel.rb @@ -31,10 +31,10 @@ def self.list end def details - "Slack ID: #{slack_id}\n - Name: #{name}\n - Topic: #{topic}\n - Member Count: #{member_count}" + "Slack ID: #{slack_id}\n" + + "Name: #{name}\n" + + "Topic: #{topic}\n" + + "Member Count: #{member_count}" end end end diff --git a/lib/recipient.rb b/lib/recipient.rb index 115b4768..26dc294e 100644 --- a/lib/recipient.rb +++ b/lib/recipient.rb @@ -37,7 +37,7 @@ def send_message(message) ) if response.keys.include? "error" || response["ok"] == false - raise SlackCLI::SlackApiError + raise SlackCLI::SlackApiError.new("Message not sent due to error: #{response["error"]}") else return true end diff --git a/lib/user.rb b/lib/user.rb index 578a77ac..86be1111 100644 --- a/lib/user.rb +++ b/lib/user.rb @@ -26,9 +26,9 @@ def self.list end def details - "Slack ID: #{slack_id}\n - Name: #{name}\n - Real Name: #{real_name}" + "Slack ID: #{slack_id}\n" + + "Name: #{name}\n" + + "Real Name: #{real_name}" end end end From 66ce941ceac71650ca5e693767ba04ffb9b8c110 Mon Sep 17 00:00:00 2001 From: geli-gel Date: Fri, 13 Sep 2019 12:34:03 -0700 Subject: [PATCH 28/32] moved send_message from slack.rb to Workspace --- lib/slack.rb | 28 ++++++++-------------------- lib/workspace.rb | 15 +++++++++++++-- 2 files changed, 21 insertions(+), 22 deletions(-) diff --git a/lib/slack.rb b/lib/slack.rb index 4ecb9613..da1659cd 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -37,12 +37,18 @@ def main if workspace.show_details == nil puts "\nNo user or channel selected." else + puts "\nDetails:" puts "#{workspace.show_details}" end when "6","send message" - send_message(workspace) - + message_result = workspace.send_message + if message_result == nil + puts "\nNo recipient selected to send message to." + elsif message_result == true + puts "Message successfully sent" + end + when "7","quit" break else @@ -102,22 +108,4 @@ def select_channel(workspace) return query_result end -def send_message(workspace) - if workspace.selected == nil - puts "\nNo recipient selected to send message to." - return nil - else - recipient = workspace.selected - puts "Send Message to '#{recipient.name}'" - print "Please enter message text: " - message_text = gets.chomp - - message_sent = recipient.send_message(message_text, recipient.slack_id) - - puts "Message Successfully Sent" - end - end - -end - main if __FILE__ == $PROGRAM_NAME diff --git a/lib/workspace.rb b/lib/workspace.rb index 17ad062c..946b39cb 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -39,7 +39,18 @@ def show_details selected ? selected.details : nil end - # def send_message - # end + +def send_message + if workspace.selected == nil + return nil + else + puts "Send Message to '#{@selected.name}'" + print "Please enter message text: " + message_text = gets.chomp + recipient.send_message(message_text) + return true + end + +end end end From f5af80e3212b801125e1151f3712f5ee976da10a Mon Sep 17 00:00:00 2001 From: geli-gel Date: Fri, 13 Sep 2019 14:26:32 -0700 Subject: [PATCH 29/32] moved methods around in slack.rb, added comment in workspace --- lib/slack.rb | 47 ++++++++++++++++++----------------------------- lib/workspace.rb | 26 +++++++++++++------------- 2 files changed, 31 insertions(+), 42 deletions(-) diff --git a/lib/slack.rb b/lib/slack.rb index da1659cd..9b6bfb57 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -15,7 +15,6 @@ def main puts "\nWhat would you like to do?" menu_options print "Action: " - #Make an "ask for input" helper method? choice = gets.chomp.downcase case choice @@ -28,10 +27,26 @@ def main list_channels(workspace) when "3","select user" - select_user(workspace) + puts "Select User" + print "Please enter a Username or Slack ID: " + query = gets.chomp.downcase + query_result = workspace.select_user(query) + if query_result == nil + puts "\nUser with Username or Slack ID '#{query}' does not exist." + else + puts "\nUser '#{query_result.name}' selected" + end when "4","select channel" - select_channel(workspace) + puts "Select Channel" + print "Please enter a Channel Name or Slack ID: " + query = gets.chomp.downcase + query_result = workspace.select_channel(query) + if query_result == nil + puts "\nChannel with Name or Slack ID '#{query}' does not exist." + else + puts "\nChannel '#{query_result.name}' selected" + end when "5","details" if workspace.show_details == nil @@ -82,30 +97,4 @@ def list_channels(workspace) tp workspace.channels, :slack_id, :name, :topic, :member_count end -def select_user(workspace) - puts "Select User" - print "Please enter a Username or Slack ID: " - query = gets.chomp.downcase - query_result = workspace.select_user(query) - if query_result == nil - puts "\nUser with Username or Slack ID '#{query}' does not exist." - else - puts "\nUser '#{query_result.name}' selected" - end - return query_result -end - -def select_channel(workspace) - puts "Select Channel" - print "Please enter a Channel Name or Slack ID: " - query = gets.chomp.downcase - query_result = workspace.select_channel(query) - if query_result == nil - puts "\nChannel with Name or Slack ID '#{query}' does not exist." - else - puts "\nChannel '#{query_result.name}' selected" - end - return query_result -end - main if __FILE__ == $PROGRAM_NAME diff --git a/lib/workspace.rb b/lib/workspace.rb index 946b39cb..71116bfc 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -38,19 +38,19 @@ def select_channel(name_or_id) def show_details selected ? selected.details : nil end - - -def send_message - if workspace.selected == nil - return nil - else - puts "Send Message to '#{@selected.name}'" - print "Please enter message text: " - message_text = gets.chomp - recipient.send_message(message_text) - return true - end -end + # Write a test for this + def send_message + if workspace.selected == nil + return nil + else + puts "Send Message to '#{@selected.name}'" + print "Please enter message text: " + message_text = gets.chomp + recipient.send_message(message_text) + return true + end + end end + end From c85040b38f7243ffd4a4b388b9cb697f8e8afd9a Mon Sep 17 00:00:00 2001 From: geli-gel Date: Fri, 13 Sep 2019 15:24:35 -0700 Subject: [PATCH 30/32] updated User details method to pull in more information, and updated workspace_test to use VCR for show_details test. --- lib/user.rb | 16 +++++++++++++++- lib/workspace.rb | 5 ++--- test/user_test.rb | 21 +++++++++++++-------- test/workspace_test.rb | 35 +++++++++++++++++++++++++++-------- 4 files changed, 57 insertions(+), 20 deletions(-) diff --git a/lib/user.rb b/lib/user.rb index 86be1111..e711ed64 100644 --- a/lib/user.rb +++ b/lib/user.rb @@ -1,5 +1,8 @@ require_relative 'recipient' require 'httparty' +require 'dotenv' + +Dotenv.load module SlackCLI @@ -26,9 +29,20 @@ def self.list end def details + key = ENV["API_TOKEN"] + response = HTTParty.get("https://slack.com/api/users.info", query: {token: key , user: @slack_id}) + if response.keys.include? "error" || response["ok"] == false + raise SlackCLI::SlackApiError + end + + status = response["user"]["profile"]["status_text"] + is_bot = response["user"]["is_bot"] ? "true" : "false" + "Slack ID: #{slack_id}\n" + "Name: #{name}\n" + - "Real Name: #{real_name}" + "Real Name: #{real_name}\n" + + "Status: #{status}" + + "Is Bot?: #{is_bot}" end end end diff --git a/lib/workspace.rb b/lib/workspace.rb index 71116bfc..69e60b28 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -39,15 +39,14 @@ def show_details selected ? selected.details : nil end - # Write a test for this def send_message - if workspace.selected == nil + if @selected == nil return nil else puts "Send Message to '#{@selected.name}'" print "Please enter message text: " message_text = gets.chomp - recipient.send_message(message_text) + @selected.send_message(message_text) return true end end diff --git a/test/user_test.rb b/test/user_test.rb index 7c1cf218..61d4bd5f 100644 --- a/test/user_test.rb +++ b/test/user_test.rb @@ -34,19 +34,24 @@ @users_list = SlackCLI::User.list end end - + it "returns a string" do - user_details = @users_list[0].details + VCR.use_cassette("get_user_info") do + user_details = @users_list[0].details - expect(user_details).must_be_instance_of String + expect(user_details).must_be_instance_of String + end end - + it "returns accurate details about the user" do - user_details2 = @users_list[0].details + VCR.use_cassette("get_user_info") do + user_details = @users_list[0].details - expect(user_details2).must_include "USLACKBOT" - expect(user_details2).must_include "slackbot" - expect(user_details2).must_include "Slackbot" + expect(user_details).must_include "USLACKBOT" + expect(user_details).must_include "slackbot" + expect(user_details).must_include "Slackbot" + expect(user_details).must_include "false" + end end end end diff --git a/test/workspace_test.rb b/test/workspace_test.rb index 5db02840..31755ec7 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -113,16 +113,18 @@ describe "show_details" do it "returns details for a selected recipient" do - channel_id = "CN9NG0YUE" - user_id = "USLACKBOT" + VCR.use_cassette("get_user_info") do + channel_id = "CN9NG0YUE" + user_id = "USLACKBOT" - @new_workspace.select_channel(channel_id) - details_1 = @new_workspace.show_details - @new_workspace.select_user(user_id) - details_2 = @new_workspace.show_details + @new_workspace.select_channel(channel_id) + details_1 = @new_workspace.show_details + @new_workspace.select_user(user_id) + details_2 = @new_workspace.show_details - expect(details_1).must_include "random" - expect(details_2).must_include "slackbot" + expect(details_1).must_include "random" + expect(details_2).must_include "slackbot" + end end it "returns nil if no user or channel is selected" do @@ -131,4 +133,21 @@ expect(@new_workspace.show_details).must_be_nil end end + + describe "send_message" do + # it "returns true if a message was sent" do + # channel_random = @new_workspace.find_instance(@new_workspace.channels, "random") + # @new_workspace.selected = channel_random + # VCR.use_cassette("workspace_send_message") do + # response = @new_workspace.send_message("trying to send from workspace_test") + # expect() + # # end + # end + + it "returns nil if no recipient is selected" do + @new_workspace.selected == nil + + expect(@new_workspace.send_message).must_be_nil + end + end end From 2b772540794c82915df604598ab702b55676fee4 Mon Sep 17 00:00:00 2001 From: geli-gel Date: Fri, 13 Sep 2019 15:30:57 -0700 Subject: [PATCH 31/32] updated Channel details method to pull more info and added tests --- lib/channel.rb | 13 ++- test/cassettes/get_channel_info.yml | 77 ++++++++++++++ test/cassettes/get_user_info.yml | 151 ++++++++++++++++++++++++++++ test/channel_test.rb | 22 ++-- 4 files changed, 254 insertions(+), 9 deletions(-) create mode 100644 test/cassettes/get_channel_info.yml create mode 100644 test/cassettes/get_user_info.yml diff --git a/lib/channel.rb b/lib/channel.rb index 6d0f4389..892e1d56 100644 --- a/lib/channel.rb +++ b/lib/channel.rb @@ -31,10 +31,21 @@ def self.list end def details + key = ENV["API_TOKEN"] + response = HTTParty.get("https://slack.com/api/channels.info", query: {token: key , channel: @slack_id}) + if response.keys.include? "error" || response["ok"] == false + raise SlackCLI::SlackApiError + end + + purpose = response["channel"]["purpose"]["value"] + is_private = response["channel"]["is_private"] ? "true" : "false" + "Slack ID: #{slack_id}\n" + "Name: #{name}\n" + "Topic: #{topic}\n" + - "Member Count: #{member_count}" + "Member Count: #{member_count}" + + "Purpose: #{purpose}" + + "Is Private? #{is_private}" end end end diff --git a/test/cassettes/get_channel_info.yml b/test/cassettes/get_channel_info.yml new file mode 100644 index 00000000..45422849 --- /dev/null +++ b/test/cassettes/get_channel_info.yml @@ -0,0 +1,77 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/channels.info?channel=CN9NG0YUE&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '408' + Connection: + - keep-alive + Date: + - Fri, 13 Sep 2019 22:28:29 GMT + Server: + - Apache + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - 404ec31c-a6a6-4b05-a0f4-fc44588bc115 + X-Oauth-Scopes: + - identify,read,post,client,apps,admin + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - channels:read,read + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-qdiq + X-Cache: + - Miss from cloudfront + Via: + - 1.1 a2a7227d0a99f50bffb8ba79de64ab0f.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19 + X-Amz-Cf-Id: + - LUJ76hop7c0sYDZMAqjmBFynR6rJGBBFjHa-HEyLUSoWn-OSXP5C7g== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channel":{"id":"CN9NG0YUE","name":"random","is_channel":true,"created":1568143383,"is_archived":false,"is_general":false,"unlinked":0,"creator":"UN9NG04TG","name_normalized":"random","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"last_read":"1568413677.000100","latest":{"user":"UN9NG04TG","type":"message","subtype":"channel_purpose","ts":"1568413677.000100","text":"<@UN9NG04TG> + set the channel purpose: RANDOMNESS!!! YES!","purpose":"RANDOMNESS!!! YES!"},"unread_count":0,"unread_count_display":0,"members":["UN9C6R7EK","UN9NG04TG"],"topic":{"value":"Non-work + banter and water cooler conversation","creator":"UN9NG04TG","last_set":1568143383},"purpose":{"value":"RANDOMNESS!!! + YES!","creator":"UN9NG04TG","last_set":1568413677},"previous_names":[]}}' + http_version: + recorded_at: Fri, 13 Sep 2019 22:28:29 GMT +recorded_with: VCR 5.0.0 diff --git a/test/cassettes/get_user_info.yml b/test/cassettes/get_user_info.yml new file mode 100644 index 00000000..70b190bb --- /dev/null +++ b/test/cassettes/get_user_info.yml @@ -0,0 +1,151 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/users.info?token=&user=USLACKBOT + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '484' + Connection: + - keep-alive + Date: + - Fri, 13 Sep 2019 22:07:12 GMT + Server: + - Apache + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - c2897c03-e838-48b9-8c62-7da44a72faea + X-Oauth-Scopes: + - identify,read,post,client,apps,admin + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - users:read,read + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-xtep + X-Cache: + - Miss from cloudfront + Via: + - 1.1 73bd23077f64204bc8f5efea09d16ebd.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - HIO51-C1 + X-Amz-Cf-Id: + - bby2dVN_c7fJqTG6sTp1ex7MoD5p0B--z0NB-3Lfk1X2Lhr_AIJJ3A== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"user":{"id":"USLACKBOT","team_id":"TMW2GFQAF","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":null,"tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Slackbot","real_name_normalized":"Slackbot","display_name":"Slackbot","display_name_normalized":"Slackbot","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"sv41d8cd98f0","always_active":true,"first_name":"slackbot","last_name":"","image_24":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png","image_32":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png","image_192":"https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png","image_512":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png","status_text_canonical":"","team":"TMW2GFQAF"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":0,"has_2fa":false}}' + http_version: + recorded_at: Fri, 13 Sep 2019 22:07:12 GMT +- request: + method: get + uri: https://slack.com/api/channels.info?channel=CN9NG0YUE&token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '492' + Connection: + - keep-alive + Date: + - Fri, 13 Sep 2019 22:27:37 GMT + Server: + - Apache + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - d6886f22-154b-46de-9bc9-3d65c878f05b + X-Oauth-Scopes: + - identify,read,post,client,apps,admin + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - channels:read,read + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-rg8i + X-Cache: + - Miss from cloudfront + Via: + - 1.1 9f2fa0c5a611130a0b26673bb62c8388.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19 + X-Amz-Cf-Id: + - gWLJ31KhQgRpf7mzeZmmQ_AMxpB0iDJ4NUUhKhRbplT9ea0sOji2hg== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channel":{"id":"CN9NG0YUE","name":"random","is_channel":true,"created":1568143383,"is_archived":false,"is_general":false,"unlinked":0,"creator":"UN9NG04TG","name_normalized":"random","is_shared":false,"is_org_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"last_read":"1568399587.000200","latest":{"type":"message","subtype":"bot_message","text":"trying + to send from recipient_test","ts":"1568399587.000200","username":"Slack API + Tester","bot_id":"BMXAJ972P"},"unread_count":0,"unread_count_display":0,"members":["UN9C6R7EK","UN9NG04TG"],"topic":{"value":"Non-work + banter and water cooler conversation","creator":"UN9NG04TG","last_set":1568143383},"purpose":{"value":"A + place for non-work-related flimflam, faffing, hodge-podge or jibber-jabber + you''d prefer to keep out of more focused work-related channels.","creator":"UN9NG04TG","last_set":1568143383},"previous_names":[]}}' + http_version: + recorded_at: Fri, 13 Sep 2019 22:27:37 GMT +recorded_with: VCR 5.0.0 diff --git a/test/channel_test.rb b/test/channel_test.rb index e7d343d0..7fd19049 100644 --- a/test/channel_test.rb +++ b/test/channel_test.rb @@ -39,18 +39,24 @@ end it "returns a string" do - channel_details = @channel_list[2].details + VCR.use_cassette("get_channel_info") do + channel_details = @channel_list[2].details - expect(channel_details).must_be_instance_of String + expect(channel_details).must_be_instance_of String + end end it "returns accurate details about the channel" do - channel_details = @channel_list[2].details - - expect(channel_details).must_include "CN9NG0YUE" - expect(channel_details).must_include "random" - expect(channel_details).must_include "Non-work banter and water cooler conversation" - expect(channel_details).must_include "2" + VCR.use_cassette("get_channel_info") do + channel_details = @channel_list[2].details + + expect(channel_details).must_include "CN9NG0YUE" + expect(channel_details).must_include "random" + expect(channel_details).must_include "Non-work banter and water cooler conversation" + expect(channel_details).must_include "2" + expect(channel_details).must_include "RANDOMNESS!!! YES!" + expect(channel_details).must_include "false" + end end end end From 1842a8d07ba177a7ab9638b2a58c27bd0c9f1f13 Mon Sep 17 00:00:00 2001 From: Paige Davenport Date: Fri, 13 Sep 2019 16:33:45 -0700 Subject: [PATCH 32/32] Refactored workspace send message method. --- lib/channel.rb | 4 +- lib/slack.rb | 18 ++++-- lib/user.rb | 2 +- lib/workspace.rb | 13 +--- test/cassettes/workspace_send_message.yml | 72 +++++++++++++++++++++++ test/workspace_test.rb | 22 +++---- 6 files changed, 101 insertions(+), 30 deletions(-) create mode 100644 test/cassettes/workspace_send_message.yml diff --git a/lib/channel.rb b/lib/channel.rb index 892e1d56..3f0054fa 100644 --- a/lib/channel.rb +++ b/lib/channel.rb @@ -43,8 +43,8 @@ def details "Slack ID: #{slack_id}\n" + "Name: #{name}\n" + "Topic: #{topic}\n" + - "Member Count: #{member_count}" + - "Purpose: #{purpose}" + + "Member Count: #{member_count}\n" + + "Purpose: #{purpose}\n" + "Is Private? #{is_private}" end end diff --git a/lib/slack.rb b/lib/slack.rb index 9b6bfb57..3e5045cb 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -57,11 +57,21 @@ def main end when "6","send message" - message_result = workspace.send_message - if message_result == nil + if workspace.selected == nil puts "\nNo recipient selected to send message to." - elsif message_result == true - puts "Message successfully sent" + else + puts "Send Message to '#{workspace.selected.name}'" + print "Please enter message text: " + message_text = gets.chomp + + until message_text != "" + puts "No message entered." + print "Please enter message text: " + message_text = gets.chomp + end + if workspace.send_message(message_text) + puts "Message successfully sent" + end end when "7","quit" diff --git a/lib/user.rb b/lib/user.rb index e711ed64..f1af5855 100644 --- a/lib/user.rb +++ b/lib/user.rb @@ -41,7 +41,7 @@ def details "Slack ID: #{slack_id}\n" + "Name: #{name}\n" + "Real Name: #{real_name}\n" + - "Status: #{status}" + + "Status: #{status}\n" + "Is Bot?: #{is_bot}" end end diff --git a/lib/workspace.rb b/lib/workspace.rb index 69e60b28..bb3bb184 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -39,16 +39,9 @@ def show_details selected ? selected.details : nil end - def send_message - if @selected == nil - return nil - else - puts "Send Message to '#{@selected.name}'" - print "Please enter message text: " - message_text = gets.chomp - @selected.send_message(message_text) - return true - end + def send_message(message_text) + @selected.send_message(message_text) + return true end end diff --git a/test/cassettes/workspace_send_message.yml b/test/cassettes/workspace_send_message.yml new file mode 100644 index 00000000..8b515bf2 --- /dev/null +++ b/test/cassettes/workspace_send_message.yml @@ -0,0 +1,72 @@ +--- +http_interactions: +- request: + method: post + uri: https://slack.com/api/chat.postMessage + body: + encoding: UTF-8 + string: token=&channel=CN9NG0YUE&text=trying%20to%20send%20from%20workspace_test + headers: + Content-Type: + - application/x-www-form-urlencoded + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Date: + - Fri, 13 Sep 2019 23:28:14 GMT + Server: + - Apache + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - 33e5121b-5c27-46fd-ac6c-7bad9a66d591 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write:bot + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - chat:write:bot + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-1a8v + X-Cache: + - Miss from cloudfront + Via: + - 1.1 34f8ef0e4c880df0650a814412a26ea6.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C1 + X-Amz-Cf-Id: + - KRPhJSqM-hB_FD2tI6CyLYQ-HTKH0je_bNLcqBh75i4WcCatTXwV2g== + body: + encoding: UTF-8 + string: '{"ok":true,"channel":"CN9NG0YUE","ts":"1568417294.000200","message":{"type":"message","subtype":"bot_message","text":"trying + to send from workspace_test","ts":"1568417294.000200","username":"Branches + - A & P - API Project","bot_id":"BN7GH7PEU"}}' + http_version: + recorded_at: Fri, 13 Sep 2019 23:28:14 GMT +recorded_with: VCR 5.0.0 diff --git a/test/workspace_test.rb b/test/workspace_test.rb index 31755ec7..b57c6eaf 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -135,19 +135,15 @@ end describe "send_message" do - # it "returns true if a message was sent" do - # channel_random = @new_workspace.find_instance(@new_workspace.channels, "random") - # @new_workspace.selected = channel_random - # VCR.use_cassette("workspace_send_message") do - # response = @new_workspace.send_message("trying to send from workspace_test") - # expect() - # # end - # end - - it "returns nil if no recipient is selected" do - @new_workspace.selected == nil - - expect(@new_workspace.send_message).must_be_nil + it "returns true if a message was sent" do + channel_random = @new_workspace.find_instance(@new_workspace.channels, "random") + @new_workspace.selected = channel_random + + VCR.use_cassette("workspace_send_message") do + response = @new_workspace.send_message("trying to send from workspace_test") + expect(response).must_equal true + end end + end end