From 2b6c2ca3e0e9633fe56887503ce982e80933eff3 Mon Sep 17 00:00:00 2001 From: roshni-patel Date: Tue, 6 Oct 2020 16:41:38 -0500 Subject: [PATCH 01/55] Worked through design exercise and setup files --- channel.rb | 0 lib/slack.rb | 1 + lib/workspace.rb | 26 ++++++++++++++++++++++++++ recipient.rb | 24 ++++++++++++++++++++++++ slack_api_test.rb | 11 +++++++++++ test/slack_test.rb | 3 +++ test/test_helper.rb | 7 ++++++- user.rb | 0 8 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 channel.rb create mode 100644 lib/workspace.rb create mode 100644 recipient.rb create mode 100644 slack_api_test.rb create mode 100644 test/slack_test.rb create mode 100644 user.rb diff --git a/channel.rb b/channel.rb new file mode 100644 index 00000000..e69de29b diff --git a/lib/slack.rb b/lib/slack.rb index 8a0b659b..d9ccb5cb 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -1,4 +1,5 @@ #!/usr/bin/env ruby +require_relative 'workspace' def main puts "Welcome to the Ada Slack CLI!" diff --git a/lib/workspace.rb b/lib/workspace.rb new file mode 100644 index 00000000..10e7845f --- /dev/null +++ b/lib/workspace.rb @@ -0,0 +1,26 @@ +class Workspace + attr_reader :users, :channels + attr_accessor :selected + + def initialize + @users = [] + @channels = [] + @selected = nil + end + + def select_channel(channel) + + end + + def select_user(user) + + end + + def send_message + + end + + def show_details + + end +end \ No newline at end of file diff --git a/recipient.rb b/recipient.rb new file mode 100644 index 00000000..9b7c8b9a --- /dev/null +++ b/recipient.rb @@ -0,0 +1,24 @@ +class Recipient + + def initialize(slack_id, name) + @slack_id = slack_id + @name = name + end + + # template methods + def details + raise NotImplementedError, "implement me in child class" + end + + def self.list_all + raise NotImplementedError, "implement me in child class" + end + + def send_message(message) + raise NotImplementedError, "implement me in child class" + end + + def self.get(url, params) + raise NotImplementedError, "implement me in child class" + end +end \ No newline at end of file diff --git a/slack_api_test.rb b/slack_api_test.rb new file mode 100644 index 00000000..aeeca555 --- /dev/null +++ b/slack_api_test.rb @@ -0,0 +1,11 @@ +require 'httparty' +require 'dotenv' +Dotenv.load + +URL = "https://slack.com/api/conversations.list" +SLACK_TOKEN = ENV['SLACK_TOKEN'] + +query = {token: SLACK_TOKEN} + +response = HTTParty.get(URL, query: query) +p response \ No newline at end of file diff --git a/test/slack_test.rb b/test/slack_test.rb new file mode 100644 index 00000000..6e1389f1 --- /dev/null +++ b/test/slack_test.rb @@ -0,0 +1,3 @@ +require_relative '../lib/slack_api_test' + +describe \ No newline at end of file diff --git a/test/test_helper.rb b/test/test_helper.rb index 1fcf2bab..61b73a0f 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -3,6 +3,9 @@ add_filter 'test/' end +require 'dotenv' +Dotenv.load + require 'minitest' require 'minitest/autorun' require 'minitest/reporters' @@ -25,5 +28,7 @@ } # Don't leave our token lying around in a cassette file. - + config.filter_sensitive_data("") do + ENV["SLACK_TOKEN"] + end end diff --git a/user.rb b/user.rb new file mode 100644 index 00000000..e69de29b From 56401fe53f020deed09395a6f35b012f98588d91 Mon Sep 17 00:00:00 2001 From: roshni-patel Date: Tue, 6 Oct 2020 16:52:36 -0500 Subject: [PATCH 02/55] Moved class files to lib folder --- channel.rb | 0 lib/channel.rb | 8 ++++++++ recipient.rb => lib/recipient.rb | 0 user.rb => lib/user.rb | 0 test/test_helper.rb | 1 + 5 files changed, 9 insertions(+) delete mode 100644 channel.rb create mode 100644 lib/channel.rb rename recipient.rb => lib/recipient.rb (100%) rename user.rb => lib/user.rb (100%) diff --git a/channel.rb b/channel.rb deleted file mode 100644 index e69de29b..00000000 diff --git a/lib/channel.rb b/lib/channel.rb new file mode 100644 index 00000000..8a45deff --- /dev/null +++ b/lib/channel.rb @@ -0,0 +1,8 @@ + +class Channel < Recipient + attr_reader :topic, :member_count + + def initialize(slack_id, name) + super(slack_id, name) + end +end \ No newline at end of file diff --git a/recipient.rb b/lib/recipient.rb similarity index 100% rename from recipient.rb rename to lib/recipient.rb diff --git a/user.rb b/lib/user.rb similarity index 100% rename from user.rb rename to lib/user.rb diff --git a/test/test_helper.rb b/test/test_helper.rb index 61b73a0f..51ef961d 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -11,6 +11,7 @@ require 'minitest/reporters' require 'minitest/skip_dsl' require 'vcr' +require 'webmock/minitest' Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new From 660e263c89fd5d30c1e41092a31722e3dcba5bdd Mon Sep 17 00:00:00 2001 From: roshni-patel Date: Tue, 6 Oct 2020 17:23:07 -0500 Subject: [PATCH 03/55] First draft of channel.rb --- lib/channel.rb | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/lib/channel.rb b/lib/channel.rb index 8a45deff..ce13be4b 100644 --- a/lib/channel.rb +++ b/lib/channel.rb @@ -1,8 +1,24 @@ +require_relative 'recipient' +require 'table_print' class Channel < Recipient attr_reader :topic, :member_count - def initialize(slack_id, name) + def initialize(slack_id, name, topic, member_count) super(slack_id, name) + @topic = topic + @member_count = member_count end -end \ No newline at end of file + + def details + return tp :slack_id, :name, :topic, :member_count + end + + def self.list_all + response = HTTParty.get("conversations.list") + all_channels = response["channels"].map do |channel| + Channel.new(channel["id"], channel["name"], channel["topic"]["value"], channel["num_members"]) + end + return all_channels + end +end From d35a786e17477a5e29aa73fd2060ac2f3e33166f Mon Sep 17 00:00:00 2001 From: Pauline Chane Date: Tue, 6 Oct 2020 15:24:24 -0700 Subject: [PATCH 04/55] v0 of user.rb User class, added recipient get method --- lib/recipient.rb | 15 +++++++++------ lib/user.rb | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 6 deletions(-) diff --git a/lib/recipient.rb b/lib/recipient.rb index 9b7c8b9a..72f38f41 100644 --- a/lib/recipient.rb +++ b/lib/recipient.rb @@ -1,24 +1,27 @@ +require 'httparty' + class Recipient def initialize(slack_id, name) @slack_id = slack_id @name = name end + # methods - # template methods - def details + def send_message(message) raise NotImplementedError, "implement me in child class" end - def self.list_all - raise NotImplementedError, "implement me in child class" + def self.get(url, params) + return HTTParty.get(url, query: params) end - def send_message(message) + # template methods + def details raise NotImplementedError, "implement me in child class" end - def self.get(url, params) + def self.list_all raise NotImplementedError, "implement me in child class" end end \ No newline at end of file diff --git a/lib/user.rb b/lib/user.rb index e69de29b..0be2418c 100644 --- a/lib/user.rb +++ b/lib/user.rb @@ -0,0 +1,37 @@ +require_relative 'recipient' +require 'dotenv' +require 'table_print' + +Dotenv.load + +class User < Recipient + + attr_reader :real_name, :status_text, :status_emoji + + def initialize(slack_id:, name:, real_name:, status_text: '', status_emoji: '') + super(slack_id, name) + @real_name = real_name + @status_text = status_text + @status_emoji = status_emoji + end + + # reader methods + def details + tp self.all + end + + # class methods + def self.list_all + url = 'https://slack.com/api/users.list' + param = {token: ENV[SLACK_TOKEN]} + raw_users = User.get(url, param)['members'] + all_users = raw_users.map do |member| + User.new(slack_id: member['id'], + name: member['name'], + real_name: member['real_name'], + status_text: member['status_text'], + status_emoji: member['status_emoji']) + end + return all_users + end +end \ No newline at end of file From f03138db270194e945ce6b373915f964dba562fd Mon Sep 17 00:00:00 2001 From: roshni-patel Date: Tue, 6 Oct 2020 17:41:20 -0500 Subject: [PATCH 05/55] Edited channel.rb list_all and details methods --- lib/channel.rb | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/lib/channel.rb b/lib/channel.rb index ce13be4b..e734f2ec 100644 --- a/lib/channel.rb +++ b/lib/channel.rb @@ -4,20 +4,25 @@ class Channel < Recipient attr_reader :topic, :member_count - def initialize(slack_id, name, topic, member_count) + def initialize(slack_id:, name:, topic:, member_count:) super(slack_id, name) @topic = topic @member_count = member_count end def details - return tp :slack_id, :name, :topic, :member_count + tp self.all end def self.list_all - response = HTTParty.get("conversations.list") - all_channels = response["channels"].map do |channel| - Channel.new(channel["id"], channel["name"], channel["topic"]["value"], channel["num_members"]) + url = "https://slack.com/api/conversations.list" + param = {token: ENV[SLACK_TOKEN]} + raw_channels = Channel.get(url, param)['channels'] + all_channels = raw_channels.map do |channel| + Channel.new(slack_id: channel["id"], + name: channel["name"], + topic: channel["topic"]["value"], + member_count: channel["num_members"]) end return all_channels end From ba97b429b136f3080157544301ec17b73cdc24ce Mon Sep 17 00:00:00 2001 From: Pauline Chane Date: Tue, 6 Oct 2020 15:47:54 -0700 Subject: [PATCH 06/55] added empty test files and SlackApiError custom exception --- lib/channel.rb | 1 + lib/slack_api_error.rb | 2 ++ lib/user.rb | 1 + 3 files changed, 4 insertions(+) create mode 100644 lib/slack_api_error.rb diff --git a/lib/channel.rb b/lib/channel.rb index e734f2ec..ba14a3ca 100644 --- a/lib/channel.rb +++ b/lib/channel.rb @@ -1,5 +1,6 @@ require_relative 'recipient' require 'table_print' +require 'slack_api_error' class Channel < Recipient attr_reader :topic, :member_count diff --git a/lib/slack_api_error.rb b/lib/slack_api_error.rb new file mode 100644 index 00000000..b0e86ca1 --- /dev/null +++ b/lib/slack_api_error.rb @@ -0,0 +1,2 @@ +class SlackApiError < StandardError +end \ No newline at end of file diff --git a/lib/user.rb b/lib/user.rb index 0be2418c..f1cdb239 100644 --- a/lib/user.rb +++ b/lib/user.rb @@ -1,6 +1,7 @@ require_relative 'recipient' require 'dotenv' require 'table_print' +require 'slack_api_error' Dotenv.load From 9bf9be8187e0593e95e5e89835b87fdc8801fba2 Mon Sep 17 00:00:00 2001 From: Pauline Chane Date: Tue, 6 Oct 2020 15:49:22 -0700 Subject: [PATCH 07/55] oops, committed from wrong directory, see last commit's comments --- test/channel_test.rb | 0 test/recipient_test.rb | 0 test/user_test.rb | 0 test/workspace_test.rb | 0 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 test/channel_test.rb create mode 100644 test/recipient_test.rb create mode 100644 test/user_test.rb create mode 100644 test/workspace_test.rb diff --git a/test/channel_test.rb b/test/channel_test.rb new file mode 100644 index 00000000..e69de29b diff --git a/test/recipient_test.rb b/test/recipient_test.rb new file mode 100644 index 00000000..e69de29b diff --git a/test/user_test.rb b/test/user_test.rb new file mode 100644 index 00000000..e69de29b diff --git a/test/workspace_test.rb b/test/workspace_test.rb new file mode 100644 index 00000000..e69de29b From e52353dde7899c8c75b674fb88be93478a76a867 Mon Sep 17 00:00:00 2001 From: Pauline Chane Date: Tue, 6 Oct 2020 17:18:14 -0700 Subject: [PATCH 08/55] removed quick script to test token, reorganized files to work with rake --- lib/recipient.rb | 2 +- slack_api_test.rb | 11 ----------- test/recipient_test.rb | 25 +++++++++++++++++++++++++ test/slack_api_error_test.rb | 0 test/slack_test.rb | 3 +-- test/test_helper.rb | 7 +++++++ 6 files changed, 34 insertions(+), 14 deletions(-) delete mode 100644 slack_api_test.rb create mode 100644 test/slack_api_error_test.rb diff --git a/lib/recipient.rb b/lib/recipient.rb index 72f38f41..1f3ef168 100644 --- a/lib/recipient.rb +++ b/lib/recipient.rb @@ -13,7 +13,7 @@ def send_message(message) end def self.get(url, params) - return HTTParty.get(url, query: params) + response = HTTParty.get(url, query: params) end # template methods diff --git a/slack_api_test.rb b/slack_api_test.rb deleted file mode 100644 index aeeca555..00000000 --- a/slack_api_test.rb +++ /dev/null @@ -1,11 +0,0 @@ -require 'httparty' -require 'dotenv' -Dotenv.load - -URL = "https://slack.com/api/conversations.list" -SLACK_TOKEN = ENV['SLACK_TOKEN'] - -query = {token: SLACK_TOKEN} - -response = HTTParty.get(URL, query: query) -p response \ No newline at end of file diff --git a/test/recipient_test.rb b/test/recipient_test.rb index e69de29b..0d9542e8 100644 --- a/test/recipient_test.rb +++ b/test/recipient_test.rb @@ -0,0 +1,25 @@ +require_relative 'test_helper' + +describe Recipient do + describe 'constructor' do + it "creates a Recipient object" do + test = Recipient.new("C01BKP7MWNB", "random") + expect(test).must_be_kind_of Recipient + end + end + + describe 'send_message' do + + end + describe 'self.get' do + + end + + describe 'details' do + + end + + describe 'self.list_all' do + + end +end \ No newline at end of file diff --git a/test/slack_api_error_test.rb b/test/slack_api_error_test.rb new file mode 100644 index 00000000..e69de29b diff --git a/test/slack_test.rb b/test/slack_test.rb index 6e1389f1..28199b15 100644 --- a/test/slack_test.rb +++ b/test/slack_test.rb @@ -1,3 +1,2 @@ -require_relative '../lib/slack_api_test' +require_relative '../lib/slack_api_error' -describe \ No newline at end of file diff --git a/test/test_helper.rb b/test/test_helper.rb index 51ef961d..106321c7 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -12,6 +12,13 @@ require 'minitest/skip_dsl' require 'vcr' require 'webmock/minitest' +require_relative '../lib/recipient' +require_relative '../lib/slack' +require_relative '../lib/channel' +require_relative '../lib/user' +require_relative '../lib/workspace' +require_relative '../lib/slack_api_error' + Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new From c49ccc8c00dfc659b51d842aa679398a06feab2c Mon Sep 17 00:00:00 2001 From: Pauline Chane Date: Tue, 6 Oct 2020 18:00:26 -0700 Subject: [PATCH 09/55] debugging User and pushing for collaborators to test issues with --- lib/recipient.rb | 1 + lib/slack_api_error.rb | 1 + lib/user.rb | 15 +++++++++++---- test/recipient_test.rb | 13 +++++++++++-- 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/lib/recipient.rb b/lib/recipient.rb index 1f3ef168..d8488d12 100644 --- a/lib/recipient.rb +++ b/lib/recipient.rb @@ -1,6 +1,7 @@ require 'httparty' class Recipient + attr_reader :slack_id, :name def initialize(slack_id, name) @slack_id = slack_id diff --git a/lib/slack_api_error.rb b/lib/slack_api_error.rb index b0e86ca1..885e2243 100644 --- a/lib/slack_api_error.rb +++ b/lib/slack_api_error.rb @@ -1,2 +1,3 @@ class SlackApiError < StandardError + end \ No newline at end of file diff --git a/lib/user.rb b/lib/user.rb index f1cdb239..72748f80 100644 --- a/lib/user.rb +++ b/lib/user.rb @@ -1,7 +1,7 @@ require_relative 'recipient' require 'dotenv' require 'table_print' -require 'slack_api_error' +# require 'slack_api_error' Dotenv.load @@ -18,13 +18,13 @@ def initialize(slack_id:, name:, real_name:, status_text: '', status_emoji: '') # reader methods def details - tp self.all + tp self, :slack_id, :name, :real_name, :status_text, :status_emoji end # class methods def self.list_all url = 'https://slack.com/api/users.list' - param = {token: ENV[SLACK_TOKEN]} + param = {token: ENV['SLACK_TOKEN']} raw_users = User.get(url, param)['members'] all_users = raw_users.map do |member| User.new(slack_id: member['id'], @@ -35,4 +35,11 @@ def self.list_all end return all_users end -end \ No newline at end of file +end + +all = User.list_all + +user = all[0] + +user2 = User.new(slack_id: "hi", name: "hi", real_name: "hi", status_text: "hi", status_emoji: "hi") +user2.details \ No newline at end of file diff --git a/test/recipient_test.rb b/test/recipient_test.rb index 0d9542e8..82cbca91 100644 --- a/test/recipient_test.rb +++ b/test/recipient_test.rb @@ -16,10 +16,19 @@ end describe 'details' do - + it "raises NotImplementedError if called from Recipient" do + test = Recipient.new("C01BKP7MWNB", "random") + expect do + test.details + end.must_raise NotImplementedError + end end describe 'self.list_all' do - + it "raises NotImplementedError if called from Recipient" do + expect do + Recipient.list_all + end.must_raise NotImplementedError + end end end \ No newline at end of file From 0ce5a32b09a22ce1b598ff21ced302abbeaa66f5 Mon Sep 17 00:00:00 2001 From: roshni-patel Date: Tue, 6 Oct 2020 20:07:52 -0500 Subject: [PATCH 10/55] Finished list_all and details methods --- lib/channel.rb | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/channel.rb b/lib/channel.rb index ba14a3ca..e8f61e54 100644 --- a/lib/channel.rb +++ b/lib/channel.rb @@ -1,6 +1,10 @@ require_relative 'recipient' require 'table_print' -require 'slack_api_error' +#require 'slack_api_error' +require 'dotenv' + +Dotenv.load + class Channel < Recipient attr_reader :topic, :member_count @@ -12,12 +16,12 @@ def initialize(slack_id:, name:, topic:, member_count:) end def details - tp self.all + return tp self, :slack_id, :name, :topic, :member_count end def self.list_all url = "https://slack.com/api/conversations.list" - param = {token: ENV[SLACK_TOKEN]} + param = {token: ENV["SLACK_TOKEN"]} raw_channels = Channel.get(url, param)['channels'] all_channels = raw_channels.map do |channel| Channel.new(slack_id: channel["id"], @@ -28,3 +32,6 @@ def self.list_all return all_channels end end + +test = Channel.new(slack_id: "1", name: "abc", topic: "random", member_count: 5) +p test.details \ No newline at end of file From dad996c366124c577540ade53399bacbe3aeb69d Mon Sep 17 00:00:00 2001 From: roshni-patel Date: Tue, 6 Oct 2020 20:47:23 -0500 Subject: [PATCH 11/55] Wrote basic CLI program for wave 1 --- lib/slack.rb | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/lib/slack.rb b/lib/slack.rb index d9ccb5cb..26cc1766 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -1,13 +1,31 @@ #!/usr/bin/env ruby require_relative 'workspace' +require 'table_print' def main puts "Welcome to the Ada Slack CLI!" workspace = Workspace.new - # TODO project + puts + puts "This workspace has #{workspace.users.length} users and #{workspace.channels.length} channels" + puts + puts "You may \n 1. see a list of the channels \n 2. see a list of the users \n 3. quit" + puts - puts "Thank you for using the Ada Slack CLI" + user_input = "" + until user_input == "quit" + puts "What would you like to do?" + user_input = gets.chomp.downcase + + case user_input + when "list channels" + tp workspace.channels, :slack_id, :name, :topic, :member_count + when "list users" + tp workspace.users, :slack_id, :name, :real_name, :status_text, :status_emoji + end + end + + puts "Thank you for using the Ada Slack CLI!" end main if __FILE__ == $PROGRAM_NAME \ No newline at end of file From 97235595ffd7f04db26dd6f9c471a88080a8dc3d Mon Sep 17 00:00:00 2001 From: Pauline Chane Date: Tue, 6 Oct 2020 18:50:32 -0700 Subject: [PATCH 12/55] added tests for recipient.rb --- lib/channel.rb | 6 +- lib/recipient.rb | 7 +- lib/user.rb | 9 +- lib/workspace.rb | 4 +- test/cassettes/Recipient_get.yml | 178 +++++++++++++++++++++++++++++++ test/recipient_test.rb | 21 +++- 6 files changed, 208 insertions(+), 17 deletions(-) create mode 100644 test/cassettes/Recipient_get.yml diff --git a/lib/channel.rb b/lib/channel.rb index e8f61e54..f889ed1b 100644 --- a/lib/channel.rb +++ b/lib/channel.rb @@ -1,6 +1,5 @@ require_relative 'recipient' require 'table_print' -#require 'slack_api_error' require 'dotenv' Dotenv.load @@ -31,7 +30,4 @@ def self.list_all end return all_channels end -end - -test = Channel.new(slack_id: "1", name: "abc", topic: "random", member_count: 5) -p test.details \ No newline at end of file +end \ No newline at end of file diff --git a/lib/recipient.rb b/lib/recipient.rb index d8488d12..60494deb 100644 --- a/lib/recipient.rb +++ b/lib/recipient.rb @@ -1,4 +1,5 @@ require 'httparty' +require_relative 'slack_api_error' class Recipient attr_reader :slack_id, :name @@ -10,11 +11,15 @@ def initialize(slack_id, name) # methods def send_message(message) - raise NotImplementedError, "implement me in child class" + raise NotImplementedError, "i shall be implemented soon!!!" end + # we are assuming, because the CLI user won't see the code and only the program + # itself uses it, that the url is a valid url. def self.get(url, params) response = HTTParty.get(url, query: params) + raise SlackApiError if response.code != 200 || !response['ok'] + return response end # template methods diff --git a/lib/user.rb b/lib/user.rb index 72748f80..0bd19076 100644 --- a/lib/user.rb +++ b/lib/user.rb @@ -35,11 +35,4 @@ def self.list_all end return all_users end -end - -all = User.list_all - -user = all[0] - -user2 = User.new(slack_id: "hi", name: "hi", real_name: "hi", status_text: "hi", status_emoji: "hi") -user2.details \ No newline at end of file +end \ No newline at end of file diff --git a/lib/workspace.rb b/lib/workspace.rb index 10e7845f..bfe18afb 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -3,8 +3,8 @@ class Workspace attr_accessor :selected def initialize - @users = [] - @channels = [] + @users = User.list_all + @channels = Channel.list_all @selected = nil end diff --git a/test/cassettes/Recipient_get.yml b/test/cassettes/Recipient_get.yml new file mode 100644 index 00000000..b30e7d7d --- /dev/null +++ b/test/cassettes/Recipient_get.yml @@ -0,0 +1,178 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/conversations.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: + Date: + - Wed, 07 Oct 2020 01:40:10 GMT + Server: + - Apache + X-Slack-Req-Id: + - bc564fba3df7d27b9986e15af525b0cd + X-Oauth-Scopes: + - users:read,channels:read,chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '656' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-wtop,haproxy-edge-pdx-ed3w + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channels":[{"id":"C01BKP7MWNB","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1601939539,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + channel is for... well, everything else. It\u2019s a place for team jokes, + spur-of-the-moment ideas, and funny GIFs. Go wild!","creator":"U01BKP7MGVD","last_set":1601939539},"previous_names":[],"num_members":2},{"id":"C01BKP8MF2T","name":"ada-c14-slack-cli-project","is_channel":true,"is_group":false,"is_im":false,"created":1601939581,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"ada-c14-slack-cli-project","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + *channel* is for working on a project. Hold meetings, share docs, and make + decisions together with your team.","creator":"U01BKP7MGVD","last_set":1601939581},"previous_names":[],"num_members":2},{"id":"C01C0MP03K5","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1601939538,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + is the one channel that will always include everyone. It\u2019s a great spot + for announcements and team-wide conversations.","creator":"U01BKP7MGVD","last_set":1601939538},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' + recorded_at: Wed, 07 Oct 2020 01:40:10 GMT +- request: + method: get + uri: https://slack.com/api/conversations.list?token=blah + 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: + Date: + - Wed, 07 Oct 2020 01:48:29 GMT + Server: + - Apache + X-Slack-Req-Id: + - d9e79dfb1415c6fb8d18348ba23dc707 + Referrer-Policy: + - no-referrer + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + X-Slack-Backend: + - r + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Content-Type-Options: + - nosniff + X-Xss-Protection: + - '0' + Content-Length: + - '55' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-od4o,haproxy-edge-pdx-333x + body: + encoding: ASCII-8BIT + string: '{"ok":false,"error":"invalid_auth"}' + recorded_at: Wed, 07 Oct 2020 01:48:29 GMT +- request: + method: get + uri: https://slack.com/api/monkeys?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: + Date: + - Wed, 07 Oct 2020 01:48:39 GMT + Server: + - Apache + X-Slack-Req-Id: + - 0a1c78be94caf1c6411e5f7e0527b501 + Referrer-Policy: + - no-referrer + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + X-Slack-Backend: + - r + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Content-Type-Options: + - nosniff + X-Xss-Protection: + - '0' + Content-Length: + - '73' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-bl82,haproxy-edge-pdx-vd1y + body: + encoding: ASCII-8BIT + string: '{"ok":false,"error":"unknown_method","req_method":"monkeys"}' + recorded_at: Wed, 07 Oct 2020 01:48:39 GMT +recorded_with: VCR 6.0.0 diff --git a/test/recipient_test.rb b/test/recipient_test.rb index 82cbca91..42617827 100644 --- a/test/recipient_test.rb +++ b/test/recipient_test.rb @@ -12,8 +12,27 @@ end describe 'self.get' do + it 'raises a SlackApiError if parameter input is invalid' do + VCR.use_cassette("Recipient.get") do + url = "https://slack.com/api/conversations.list" + param = {token: 'blah'} + expect do + Recipient.get(url, param) + end.must_raise SlackApiError + expect do + Recipient.get("https://slack.com/api/monkeys", {token: ENV['SLACK_TOKEN']}) + end.must_raise SlackApiError + end + end - end + it 'returns a response for url and legal params' + VCR.use_cassette("Recipient.get") do + url = "https://slack.com/api/conversations.list" + param = {token: ENV['SLACK_TOKEN']} + response = Recipient.get(url, param) + # need to find expect that actually works + end + end describe 'details' do it "raises NotImplementedError if called from Recipient" do From 7ccc2a16c9c52e4b0e49127410f7c6f7b4f5c2ae Mon Sep 17 00:00:00 2001 From: Pauline Chane Date: Tue, 6 Oct 2020 18:57:51 -0700 Subject: [PATCH 13/55] working nominal test for self.get method in recipient --- test/recipient_test.rb | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/test/recipient_test.rb b/test/recipient_test.rb index 42617827..f05452fe 100644 --- a/test/recipient_test.rb +++ b/test/recipient_test.rb @@ -25,15 +25,15 @@ end end - it 'returns a response for url and legal params' - VCR.use_cassette("Recipient.get") do - url = "https://slack.com/api/conversations.list" - param = {token: ENV['SLACK_TOKEN']} - response = Recipient.get(url, param) - # need to find expect that actually works - end + it 'returns a response for url and legal params' do + VCR.use_cassette("Recipient.get") do + url = "https://slack.com/api/conversations.list" + param = {token: ENV['SLACK_TOKEN']} + response = Recipient.get(url, param) + expect(response["ok"]).must_equal true + end end - + end describe 'details' do it "raises NotImplementedError if called from Recipient" do test = Recipient.new("C01BKP7MWNB", "random") From 14cc009871e7fc0942fefea4b965015f77e86560 Mon Sep 17 00:00:00 2001 From: roshni-patel Date: Tue, 6 Oct 2020 21:17:23 -0500 Subject: [PATCH 14/55] Edited CLI program, workspace.rb, working and able to get info from test server --- lib/slack.rb | 8 ++++++-- lib/workspace.rb | 4 ++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/slack.rb b/lib/slack.rb index 26cc1766..88b8f4bb 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -9,19 +9,23 @@ def main puts puts "This workspace has #{workspace.users.length} users and #{workspace.channels.length} channels" puts - puts "You may \n 1. see a list of the channels \n 2. see a list of the users \n 3. quit" + puts "You may \n 1. list channels \n 2. list users \n 3. quit" puts user_input = "" until user_input == "quit" puts "What would you like to do?" - user_input = gets.chomp.downcase + user_input = gets.strip.downcase case user_input when "list channels" tp workspace.channels, :slack_id, :name, :topic, :member_count when "list users" tp workspace.users, :slack_id, :name, :real_name, :status_text, :status_emoji + when "quit" + user_input = "quit" + else + puts "That's not a valid option. Please try again." end end diff --git a/lib/workspace.rb b/lib/workspace.rb index bfe18afb..33a00727 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -1,3 +1,7 @@ +require_relative 'user' +require_relative 'recipient' +require_relative 'channel' + class Workspace attr_reader :users, :channels attr_accessor :selected From 03cd82bbf3585f5724b1263c5a84e0292fc5115a Mon Sep 17 00:00:00 2001 From: Pauline Chane Date: Tue, 6 Oct 2020 19:21:18 -0700 Subject: [PATCH 15/55] fixed initialize param in recipient to keywords --- lib/channel.rb | 2 +- lib/recipient.rb | 2 +- lib/user.rb | 2 +- test/recipient_test.rb | 5 +++-- test/user_test.rb | 7 +++++++ 5 files changed, 13 insertions(+), 5 deletions(-) diff --git a/lib/channel.rb b/lib/channel.rb index f889ed1b..4c249c31 100644 --- a/lib/channel.rb +++ b/lib/channel.rb @@ -9,7 +9,7 @@ class Channel < Recipient attr_reader :topic, :member_count def initialize(slack_id:, name:, topic:, member_count:) - super(slack_id, name) + super(slack_id: slack_id, name: name) @topic = topic @member_count = member_count end diff --git a/lib/recipient.rb b/lib/recipient.rb index 60494deb..1c942979 100644 --- a/lib/recipient.rb +++ b/lib/recipient.rb @@ -4,7 +4,7 @@ class Recipient attr_reader :slack_id, :name - def initialize(slack_id, name) + def initialize(slack_id: , name: ) @slack_id = slack_id @name = name end diff --git a/lib/user.rb b/lib/user.rb index 0bd19076..24fae2ed 100644 --- a/lib/user.rb +++ b/lib/user.rb @@ -10,7 +10,7 @@ class User < Recipient attr_reader :real_name, :status_text, :status_emoji def initialize(slack_id:, name:, real_name:, status_text: '', status_emoji: '') - super(slack_id, name) + super(slack_id: slack_id,name: name) @real_name = real_name @status_text = status_text @status_emoji = status_emoji diff --git a/test/recipient_test.rb b/test/recipient_test.rb index f05452fe..40235e29 100644 --- a/test/recipient_test.rb +++ b/test/recipient_test.rb @@ -3,8 +3,9 @@ describe Recipient do describe 'constructor' do it "creates a Recipient object" do - test = Recipient.new("C01BKP7MWNB", "random") + test = Recipient.new(slack_id: "C01BKP7MWNB",name: "random") expect(test).must_be_kind_of Recipient + expect(slack) end end @@ -36,7 +37,7 @@ end describe 'details' do it "raises NotImplementedError if called from Recipient" do - test = Recipient.new("C01BKP7MWNB", "random") + test = Recipient.new(slack_id: "C01BKP7MWNB", name: "random") expect do test.details end.must_raise NotImplementedError diff --git a/test/user_test.rb b/test/user_test.rb index e69de29b..ae816ded 100644 --- a/test/user_test.rb +++ b/test/user_test.rb @@ -0,0 +1,7 @@ +require_relative 'test_helper' + +describe User do + describe 'constructor' do + + end +end From 05095174a8d4b9e02d1e90d3ff51b5d2482029f3 Mon Sep 17 00:00:00 2001 From: Pauline Chane Date: Tue, 6 Oct 2020 19:24:03 -0700 Subject: [PATCH 16/55] forgot to delete the two tests files we don't really need, oops (again) --- test/recipient_test.rb | 5 +++-- test/slack_api_error_test.rb | 0 test/slack_test.rb | 2 -- 3 files changed, 3 insertions(+), 4 deletions(-) delete mode 100644 test/slack_api_error_test.rb delete mode 100644 test/slack_test.rb diff --git a/test/recipient_test.rb b/test/recipient_test.rb index 40235e29..757ba1bd 100644 --- a/test/recipient_test.rb +++ b/test/recipient_test.rb @@ -5,12 +5,13 @@ it "creates a Recipient object" do test = Recipient.new(slack_id: "C01BKP7MWNB",name: "random") expect(test).must_be_kind_of Recipient - expect(slack) + expect(test.slack_id).must_equal "C01BKP7MWNB" + expect(test.name).must_equal "random" end end describe 'send_message' do - + # ADD TESTS DURING WAVE 3 end describe 'self.get' do it 'raises a SlackApiError if parameter input is invalid' do diff --git a/test/slack_api_error_test.rb b/test/slack_api_error_test.rb deleted file mode 100644 index e69de29b..00000000 diff --git a/test/slack_test.rb b/test/slack_test.rb deleted file mode 100644 index 28199b15..00000000 --- a/test/slack_test.rb +++ /dev/null @@ -1,2 +0,0 @@ -require_relative '../lib/slack_api_error' - From 7a5c12677af15e1171296a3dbb5b08106e4287c4 Mon Sep 17 00:00:00 2001 From: roshni-patel Date: Tue, 6 Oct 2020 21:56:50 -0500 Subject: [PATCH 17/55] First draft of channel.rb tests --- lib/channel.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/channel.rb b/lib/channel.rb index 4c249c31..9eb5e3c6 100644 --- a/lib/channel.rb +++ b/lib/channel.rb @@ -4,7 +4,6 @@ Dotenv.load - class Channel < Recipient attr_reader :topic, :member_count From 12b6c6eae1e8bac4144ce562311b59d9c144ce26 Mon Sep 17 00:00:00 2001 From: roshni-patel Date: Tue, 6 Oct 2020 21:58:39 -0500 Subject: [PATCH 18/55] First draft of channel.rb tests --- test/channel_test.rb | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/test/channel_test.rb b/test/channel_test.rb index e69de29b..ed16d53c 100644 --- a/test/channel_test.rb +++ b/test/channel_test.rb @@ -0,0 +1,30 @@ +require_relative 'test_helper' + +describe "Channel" do + before do + @channel = Channel.new(slack_id: "C01BKP7MWNB", name: "random", topic: "", member_count: 2) + end + + describe "Initialize method" do + it "it creates an instance of channel" do + expect(@channel).must_be_kind_of Channel + end + end + + describe "Details method" do + it "lists the details for a channel" do + expect(@channel.details).must_be_kind_of TablePrint::Returnable + end + end + + describe "List all method" do + it "returns all channels in the workspace" do + VCR.use_cassette("list_all") do + CHANNELS_URL = "https://slack.com/api/conversations.list" + SLACK_TOKEN = ENV["SLACK_TOKEN"] + HTTParty.get(CHANNELS_URL, query: {token: SLACK_TOKEN }) + expect(Channel.list_all.length).must_equal 3 + end + end + end +end From e044a864048f5b3d5f8946cfa0c9bfcafbac0f06 Mon Sep 17 00:00:00 2001 From: Pauline Chane Date: Tue, 6 Oct 2020 20:06:14 -0700 Subject: [PATCH 19/55] added more to list_all Channel test --- lib/user.rb | 6 ++ test/cassettes/list_all.yml | 210 ++++++++++++++++++++++++++++++++++++ test/channel_test.rb | 8 +- test/user_test.rb | 6 ++ 4 files changed, 228 insertions(+), 2 deletions(-) create mode 100644 test/cassettes/list_all.yml diff --git a/lib/user.rb b/lib/user.rb index 24fae2ed..6060af42 100644 --- a/lib/user.rb +++ b/lib/user.rb @@ -19,6 +19,12 @@ def initialize(slack_id:, name:, real_name:, status_text: '', status_emoji: '') # reader methods def details tp self, :slack_id, :name, :real_name, :status_text, :status_emoji + return {"SLACK_ID": @slack_id, + "NAME": @name, + "REAL_NAME": @real_name, + "STATUS_TEXT": @status_text, + "STATUS_EMOJI": @status_emoji + } end # class methods diff --git a/test/cassettes/list_all.yml b/test/cassettes/list_all.yml new file mode 100644 index 00000000..60986f0f --- /dev/null +++ b/test/cassettes/list_all.yml @@ -0,0 +1,210 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/conversations.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: + Date: + - Wed, 07 Oct 2020 03:00:47 GMT + Server: + - Apache + X-Slack-Req-Id: + - 2ee237d69bfeaf960cdd33478bf75692 + X-Oauth-Scopes: + - users:read,channels:read,chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '656' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-9rc7,haproxy-edge-pdx-jlix + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channels":[{"id":"C01BKP7MWNB","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1601939539,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + channel is for... well, everything else. It\u2019s a place for team jokes, + spur-of-the-moment ideas, and funny GIFs. Go wild!","creator":"U01BKP7MGVD","last_set":1601939539},"previous_names":[],"num_members":2},{"id":"C01BKP8MF2T","name":"ada-c14-slack-cli-project","is_channel":true,"is_group":false,"is_im":false,"created":1601939581,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"ada-c14-slack-cli-project","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + *channel* is for working on a project. Hold meetings, share docs, and make + decisions together with your team.","creator":"U01BKP7MGVD","last_set":1601939581},"previous_names":[],"num_members":2},{"id":"C01C0MP03K5","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1601939538,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + is the one channel that will always include everyone. It\u2019s a great spot + for announcements and team-wide conversations.","creator":"U01BKP7MGVD","last_set":1601939538},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' + recorded_at: Wed, 07 Oct 2020 03:00:47 GMT +- request: + method: get + uri: https://slack.com/api/conversations.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: + Date: + - Wed, 07 Oct 2020 03:00:48 GMT + Server: + - Apache + X-Slack-Req-Id: + - fe4a407bd6b330c4890d2e9bab60e1b7 + X-Oauth-Scopes: + - users:read,channels:read,chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '656' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-kuqq,haproxy-edge-pdx-ylha + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channels":[{"id":"C01BKP7MWNB","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1601939539,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + channel is for... well, everything else. It\u2019s a place for team jokes, + spur-of-the-moment ideas, and funny GIFs. Go wild!","creator":"U01BKP7MGVD","last_set":1601939539},"previous_names":[],"num_members":2},{"id":"C01BKP8MF2T","name":"ada-c14-slack-cli-project","is_channel":true,"is_group":false,"is_im":false,"created":1601939581,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"ada-c14-slack-cli-project","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + *channel* is for working on a project. Hold meetings, share docs, and make + decisions together with your team.","creator":"U01BKP7MGVD","last_set":1601939581},"previous_names":[],"num_members":2},{"id":"C01C0MP03K5","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1601939538,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + is the one channel that will always include everyone. It\u2019s a great spot + for announcements and team-wide conversations.","creator":"U01BKP7MGVD","last_set":1601939538},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' + recorded_at: Wed, 07 Oct 2020 03:00:48 GMT +- request: + method: get + uri: https://slack.com/api/conversations.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: + Date: + - Wed, 07 Oct 2020 03:00:48 GMT + Server: + - Apache + X-Slack-Req-Id: + - d3c1fdbc9559e110f7d35eaa1bdac535 + X-Oauth-Scopes: + - users:read,channels:read,chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '656' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-5dq3,haproxy-edge-pdx-1cbr + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channels":[{"id":"C01BKP7MWNB","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1601939539,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + channel is for... well, everything else. It\u2019s a place for team jokes, + spur-of-the-moment ideas, and funny GIFs. Go wild!","creator":"U01BKP7MGVD","last_set":1601939539},"previous_names":[],"num_members":2},{"id":"C01BKP8MF2T","name":"ada-c14-slack-cli-project","is_channel":true,"is_group":false,"is_im":false,"created":1601939581,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"ada-c14-slack-cli-project","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + *channel* is for working on a project. Hold meetings, share docs, and make + decisions together with your team.","creator":"U01BKP7MGVD","last_set":1601939581},"previous_names":[],"num_members":2},{"id":"C01C0MP03K5","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1601939538,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + is the one channel that will always include everyone. It\u2019s a great spot + for announcements and team-wide conversations.","creator":"U01BKP7MGVD","last_set":1601939538},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' + recorded_at: Wed, 07 Oct 2020 03:00:48 GMT +recorded_with: VCR 6.0.0 diff --git a/test/channel_test.rb b/test/channel_test.rb index ed16d53c..8bdaa1c5 100644 --- a/test/channel_test.rb +++ b/test/channel_test.rb @@ -22,8 +22,12 @@ VCR.use_cassette("list_all") do CHANNELS_URL = "https://slack.com/api/conversations.list" SLACK_TOKEN = ENV["SLACK_TOKEN"] - HTTParty.get(CHANNELS_URL, query: {token: SLACK_TOKEN }) - expect(Channel.list_all.length).must_equal 3 + response = HTTParty.get(CHANNELS_URL, query: {token: SLACK_TOKEN })["channels"] + channels = Channel.list_all + expect(Channel.list_all.length).must_equal response.length + response.length.times do |i| + expect(response[i]["id"]).must_equal channels[i].slack_id + end end end end diff --git a/test/user_test.rb b/test/user_test.rb index ae816ded..2c2e4809 100644 --- a/test/user_test.rb +++ b/test/user_test.rb @@ -3,5 +3,11 @@ describe User do describe 'constructor' do + end + describe 'details' do + + end + describe 'self.list_all' do + end end From 18fb0752791355825c0fa97deba7134b51ed5ad8 Mon Sep 17 00:00:00 2001 From: roshni-patel Date: Tue, 6 Oct 2020 22:22:24 -0500 Subject: [PATCH 20/55] Updated channel test file details method and details method in channel.rb, output should be hash rather than returnable --- lib/channel.rb | 7 ++++++- test/channel_test.rb | 8 +++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/channel.rb b/lib/channel.rb index 9eb5e3c6..fef728fd 100644 --- a/lib/channel.rb +++ b/lib/channel.rb @@ -14,7 +14,12 @@ def initialize(slack_id:, name:, topic:, member_count:) end def details - return tp self, :slack_id, :name, :topic, :member_count + tp self, :slack_id, :name, :topic, :member_count + return {"SLACK_ID": @slack_id, + "NAME": @name, + "TOPIC": @topic, + "MEMBER_COUNT": @member_count + } end def self.list_all diff --git a/test/channel_test.rb b/test/channel_test.rb index 8bdaa1c5..a916cc60 100644 --- a/test/channel_test.rb +++ b/test/channel_test.rb @@ -13,7 +13,7 @@ describe "Details method" do it "lists the details for a channel" do - expect(@channel.details).must_be_kind_of TablePrint::Returnable + expect(@channel.details).must_be_kind_of Hash end end @@ -27,7 +27,13 @@ expect(Channel.list_all.length).must_equal response.length response.length.times do |i| expect(response[i]["id"]).must_equal channels[i].slack_id + expect(response[i]["name"]).must_equal channels[i].name + expect(response[i]["topic"]["value"]).must_equal channels[i].topic + expect(response[i]["num_members"]).must_equal channels[i].member_count end + + # NOTE: We didn't write a test to check whether the token is valid because that has already been tested in the + # .get method in Recipient.rb from which it inherits, meaning it should work here too for channel.rb end end end From 1f40e2fb6a1481e375b820a8142b54a6c5440413 Mon Sep 17 00:00:00 2001 From: Pauline Chane Date: Tue, 6 Oct 2020 20:32:50 -0700 Subject: [PATCH 21/55] completed tests for user.rb --- test/cassettes/list_all.yml | 228 ++++++++++++++++++++++++++++++++++++ test/user_test.rb | 47 +++++++- 2 files changed, 274 insertions(+), 1 deletion(-) diff --git a/test/cassettes/list_all.yml b/test/cassettes/list_all.yml index 60986f0f..5db05543 100644 --- a/test/cassettes/list_all.yml +++ b/test/cassettes/list_all.yml @@ -207,4 +207,232 @@ http_interactions: is the one channel that will always include everyone. It\u2019s a great spot for announcements and team-wide conversations.","creator":"U01BKP7MGVD","last_set":1601939538},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' recorded_at: Wed, 07 Oct 2020 03:00:48 GMT +- 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: + Date: + - Wed, 07 Oct 2020 03:28:31 GMT + Server: + - Apache + X-Slack-Req-Id: + - 03271dcffd7120f1a1b51f4799e7e6c8 + X-Oauth-Scopes: + - users:read,channels:read,chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - users:read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '1403' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-mki5,haproxy-edge-pdx-0i42 + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"T01C6M7N136","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":"America\/Los_Angeles","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":"T01C6M7N136"},"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":"U01BKP7MGVD","team_id":"T01C6M7N136","name":"pauline.chane","deleted":false,"color":"9f69e7","real_name":"pauline.chane","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"pauline.chane","real_name_normalized":"pauline.chane","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gac6154e1c22","image_24":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png","status_text_canonical":"","team":"T01C6M7N136"},"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":1601939538},{"id":"U01BW7XP2KY","team_id":"T01C6M7N136","name":"fire_pauline_slack_cl","deleted":false,"color":"e7392d","real_name":"Fire + - Pauline - Slack CLI","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight + Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Fire + - Pauline - Slack CLI","real_name_normalized":"Fire - Pauline - Slack CLI","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gd69838ab849","api_app_id":"A01BZS74GDB","always_active":false,"bot_id":"B01C94S0PMJ","image_24":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1602014193},{"id":"U01BXCZPJBF","team_id":"T01C6M7N136","name":"rpatel01","deleted":false,"color":"4bbe2e","real_name":"Roshni + Patel","tz":"America\/Chicago","tz_label":"Central Daylight Time","tz_offset":-18000,"profile":{"title":"","phone":"","skype":"","real_name":"Roshni + Patel","real_name_normalized":"Roshni Patel","display_name":"Roshni Patel","display_name_normalized":"Roshni + Patel","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g06d8eb9fe76","image_24":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_admin":true,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1601942634},{"id":"U01C33TL48J","team_id":"T01C6M7N136","name":"fire_roshni_api_pro2","deleted":false,"color":"674b1b","real_name":"Fire + - Roshni - API Project","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight + Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Fire + - Roshni - API Project","real_name_normalized":"Fire - Roshni - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g4bff6015394","api_app_id":"A01C98GFT5J","always_active":false,"bot_id":"B01BWBQTUEA","image_24":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1602017351},{"id":"U01CFJST9SM","team_id":"T01C6M7N136","name":"fire_roshni_api_proje","deleted":true,"profile":{"title":"","phone":"","skype":"","real_name":"Fire + - Roshni - API Project","real_name_normalized":"Fire - Roshni - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g0a5c0c0a39c","api_app_id":"A01CSQSKQE4","always_active":false,"bot_id":"B01CSR2C56U","first_name":"Fire","last_name":"- + Roshni - API Project","image_24":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_bot":true,"is_app_user":false,"updated":1602017279}],"cache_ts":1602041311,"response_metadata":{"next_cursor":""}}' + recorded_at: Wed, 07 Oct 2020 03:28:31 GMT +- 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: + Date: + - Wed, 07 Oct 2020 03:28:32 GMT + Server: + - Apache + X-Slack-Req-Id: + - 63c4fb2e4d78f45fbf8450021038ed8a + X-Oauth-Scopes: + - users:read,channels:read,chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - users:read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '1403' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-xfba,haproxy-edge-pdx-74gg + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"T01C6M7N136","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":"America\/Los_Angeles","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":"T01C6M7N136"},"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":"U01BKP7MGVD","team_id":"T01C6M7N136","name":"pauline.chane","deleted":false,"color":"9f69e7","real_name":"pauline.chane","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"pauline.chane","real_name_normalized":"pauline.chane","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gac6154e1c22","image_24":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png","status_text_canonical":"","team":"T01C6M7N136"},"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":1601939538},{"id":"U01BW7XP2KY","team_id":"T01C6M7N136","name":"fire_pauline_slack_cl","deleted":false,"color":"e7392d","real_name":"Fire + - Pauline - Slack CLI","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight + Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Fire + - Pauline - Slack CLI","real_name_normalized":"Fire - Pauline - Slack CLI","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gd69838ab849","api_app_id":"A01BZS74GDB","always_active":false,"bot_id":"B01C94S0PMJ","image_24":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1602014193},{"id":"U01BXCZPJBF","team_id":"T01C6M7N136","name":"rpatel01","deleted":false,"color":"4bbe2e","real_name":"Roshni + Patel","tz":"America\/Chicago","tz_label":"Central Daylight Time","tz_offset":-18000,"profile":{"title":"","phone":"","skype":"","real_name":"Roshni + Patel","real_name_normalized":"Roshni Patel","display_name":"Roshni Patel","display_name_normalized":"Roshni + Patel","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g06d8eb9fe76","image_24":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_admin":true,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1601942634},{"id":"U01C33TL48J","team_id":"T01C6M7N136","name":"fire_roshni_api_pro2","deleted":false,"color":"674b1b","real_name":"Fire + - Roshni - API Project","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight + Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Fire + - Roshni - API Project","real_name_normalized":"Fire - Roshni - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g4bff6015394","api_app_id":"A01C98GFT5J","always_active":false,"bot_id":"B01BWBQTUEA","image_24":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1602017351},{"id":"U01CFJST9SM","team_id":"T01C6M7N136","name":"fire_roshni_api_proje","deleted":true,"profile":{"title":"","phone":"","skype":"","real_name":"Fire + - Roshni - API Project","real_name_normalized":"Fire - Roshni - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g0a5c0c0a39c","api_app_id":"A01CSQSKQE4","always_active":false,"bot_id":"B01CSR2C56U","first_name":"Fire","last_name":"- + Roshni - API Project","image_24":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_bot":true,"is_app_user":false,"updated":1602017279}],"cache_ts":1602041312,"response_metadata":{"next_cursor":""}}' + recorded_at: Wed, 07 Oct 2020 03:28:32 GMT +- 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: + Date: + - Wed, 07 Oct 2020 03:29:01 GMT + Server: + - Apache + X-Slack-Req-Id: + - a09997eda8d383042dca9409bc93caea + X-Oauth-Scopes: + - users:read,channels:read,chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - users:read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '1403' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-e13u,haproxy-edge-pdx-1nke + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"T01C6M7N136","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":"America\/Los_Angeles","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":"T01C6M7N136"},"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":"U01BKP7MGVD","team_id":"T01C6M7N136","name":"pauline.chane","deleted":false,"color":"9f69e7","real_name":"pauline.chane","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"pauline.chane","real_name_normalized":"pauline.chane","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gac6154e1c22","image_24":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png","status_text_canonical":"","team":"T01C6M7N136"},"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":1601939538},{"id":"U01BW7XP2KY","team_id":"T01C6M7N136","name":"fire_pauline_slack_cl","deleted":false,"color":"e7392d","real_name":"Fire + - Pauline - Slack CLI","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight + Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Fire + - Pauline - Slack CLI","real_name_normalized":"Fire - Pauline - Slack CLI","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gd69838ab849","api_app_id":"A01BZS74GDB","always_active":false,"bot_id":"B01C94S0PMJ","image_24":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1602014193},{"id":"U01BXCZPJBF","team_id":"T01C6M7N136","name":"rpatel01","deleted":false,"color":"4bbe2e","real_name":"Roshni + Patel","tz":"America\/Chicago","tz_label":"Central Daylight Time","tz_offset":-18000,"profile":{"title":"","phone":"","skype":"","real_name":"Roshni + Patel","real_name_normalized":"Roshni Patel","display_name":"Roshni Patel","display_name_normalized":"Roshni + Patel","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g06d8eb9fe76","image_24":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_admin":true,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1601942634},{"id":"U01C33TL48J","team_id":"T01C6M7N136","name":"fire_roshni_api_pro2","deleted":false,"color":"674b1b","real_name":"Fire + - Roshni - API Project","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight + Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Fire + - Roshni - API Project","real_name_normalized":"Fire - Roshni - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g4bff6015394","api_app_id":"A01C98GFT5J","always_active":false,"bot_id":"B01BWBQTUEA","image_24":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1602017351},{"id":"U01CFJST9SM","team_id":"T01C6M7N136","name":"fire_roshni_api_proje","deleted":true,"profile":{"title":"","phone":"","skype":"","real_name":"Fire + - Roshni - API Project","real_name_normalized":"Fire - Roshni - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g0a5c0c0a39c","api_app_id":"A01CSQSKQE4","always_active":false,"bot_id":"B01CSR2C56U","first_name":"Fire","last_name":"- + Roshni - API Project","image_24":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_bot":true,"is_app_user":false,"updated":1602017279}],"cache_ts":1602041341,"response_metadata":{"next_cursor":""}}' + recorded_at: Wed, 07 Oct 2020 03:29:01 GMT recorded_with: VCR 6.0.0 diff --git a/test/user_test.rb b/test/user_test.rb index 2c2e4809..4a36f938 100644 --- a/test/user_test.rb +++ b/test/user_test.rb @@ -1,13 +1,58 @@ require_relative 'test_helper' describe User do + before do + @user = User.new(slack_id: "USLACKBOT", name: "slackbot", real_name: "Slackbot") + end describe 'constructor' do - + it "creates an instance of user with appropriate fields" do + # Assert + expect(@user).must_be_kind_of User + expect(@user.slack_id).must_equal "USLACKBOT" + expect(@user.name).must_equal "slackbot" + expect(@user.real_name).must_equal "Slackbot" + expect(@user.status_text).must_be_empty + expect(@user.status_emoji).must_be_empty + end end describe 'details' do + it "lists the details for a user" do + # Arrange and Act + user_details = @user.details + # Assert + expect(user_details).must_be_kind_of Hash + expect(user_details[:SLACK_ID]).must_equal @user.slack_id + expect(user_details[:NAME]).must_equal @user.name + expect(user_details[:REAL_NAME]).must_equal @user.real_name + expect(user_details[:STATUS_TEXT]).must_equal @user.status_text + expect(user_details[:STATUS_EMOJI]).must_equal @user.status_emoji + end end describe 'self.list_all' do + it "returns all users in the workspace" do + VCR.use_cassette("list_all") do + # Arrange + USERS_URL = "https://slack.com/api/users.list" + SLACK_TOKEN = ENV["SLACK_TOKEN"] + response = HTTParty.get(USERS_URL, query: {token: SLACK_TOKEN })["members"] + + # Act + users = User.list_all + + # Assert + expect(User.list_all.length).must_equal response.length + response.length.times do |i| + expect(response[i]["id"]).must_equal users[i].slack_id + expect(response[i]["name"]).must_equal users[i].name + expect(response[i]["real_name"]).must_equal users[i].real_name + expect(response[i]["status_text"]).must_equal users[i].status_text + expect(response[i]["status_emoji"]).must_equal users[i].status_emoji + end + # NOTE: We didn't write a test to check whether the token is valid because that has already been tested in the + # .get method in Recipient.rb from which it inherits, meaning it should work here too for user.rb + end + end end end From 53c5c909258df66c9d4090e01727d86355380828 Mon Sep 17 00:00:00 2001 From: roshni-patel Date: Tue, 6 Oct 2020 22:45:15 -0500 Subject: [PATCH 22/55] Added some more assertions to channel.rb test --- test/channel_test.rb | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/test/channel_test.rb b/test/channel_test.rb index a916cc60..0b8bdac0 100644 --- a/test/channel_test.rb +++ b/test/channel_test.rb @@ -8,22 +8,39 @@ describe "Initialize method" do it "it creates an instance of channel" do expect(@channel).must_be_kind_of Channel + expect(@channel.slack_id).must_equal "C01BKP7MWNB" + expect(@channel.name).must_equal "random" + expect(@channel.topic).must_equal "" + expect(@channel.member_count).must_equal 2 end end describe "Details method" do it "lists the details for a channel" do + # Arrange and Act + channel_details = @channel.details + + # Assert expect(@channel.details).must_be_kind_of Hash + expect(channel_details[:SLACK_ID]).must_equal @channel.slack_id + expect(channel_details[:NAME]).must_equal @channel.name + expect(channel_details[:TOPIC]).must_equal @channel.topic + expect(channel_details[:MEMBER_COUNT]).must_equal @channel.member_count end end describe "List all method" do it "returns all channels in the workspace" do VCR.use_cassette("list_all") do + # Arrange CHANNELS_URL = "https://slack.com/api/conversations.list" SLACK_TOKEN = ENV["SLACK_TOKEN"] response = HTTParty.get(CHANNELS_URL, query: {token: SLACK_TOKEN })["channels"] + + # Act channels = Channel.list_all + + # Assert expect(Channel.list_all.length).must_equal response.length response.length.times do |i| expect(response[i]["id"]).must_equal channels[i].slack_id From 80b886b99dd3c1d77b869bd8bfde7d4dcda932dd Mon Sep 17 00:00:00 2001 From: Pauline Chane Date: Tue, 6 Oct 2020 21:01:42 -0700 Subject: [PATCH 23/55] added workspace.rb test for constructor; wave 1 has been finishedga .ga .ga .ga .ga . --- test/cassettes/workspace.yml | 148 +++++++++++++++++++++++++++++++++++ test/channel_test.rb | 3 +- test/user_test.rb | 3 +- test/workspace_test.rb | 38 +++++++++ 4 files changed, 190 insertions(+), 2 deletions(-) create mode 100644 test/cassettes/workspace.yml diff --git a/test/cassettes/workspace.yml b/test/cassettes/workspace.yml new file mode 100644 index 00000000..1d79c062 --- /dev/null +++ b/test/cassettes/workspace.yml @@ -0,0 +1,148 @@ +--- +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: + Date: + - Wed, 07 Oct 2020 03:54:10 GMT + Server: + - Apache + X-Slack-Req-Id: + - beb6d8e87931ae309016b09cc3314333 + X-Oauth-Scopes: + - users:read,channels:read,chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - users:read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '1402' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-008d,haproxy-edge-pdx-locq + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"T01C6M7N136","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":"America\/Los_Angeles","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":"T01C6M7N136"},"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":"U01BKP7MGVD","team_id":"T01C6M7N136","name":"pauline.chane","deleted":false,"color":"9f69e7","real_name":"pauline.chane","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"pauline.chane","real_name_normalized":"pauline.chane","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gac6154e1c22","image_24":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png","status_text_canonical":"","team":"T01C6M7N136"},"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":1601939538},{"id":"U01BW7XP2KY","team_id":"T01C6M7N136","name":"fire_pauline_slack_cl","deleted":false,"color":"e7392d","real_name":"Fire + - Pauline - Slack CLI","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight + Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Fire + - Pauline - Slack CLI","real_name_normalized":"Fire - Pauline - Slack CLI","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gd69838ab849","api_app_id":"A01BZS74GDB","always_active":false,"bot_id":"B01C94S0PMJ","image_24":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1602014193},{"id":"U01BXCZPJBF","team_id":"T01C6M7N136","name":"rpatel01","deleted":false,"color":"4bbe2e","real_name":"Roshni + Patel","tz":"America\/Chicago","tz_label":"Central Daylight Time","tz_offset":-18000,"profile":{"title":"","phone":"","skype":"","real_name":"Roshni + Patel","real_name_normalized":"Roshni Patel","display_name":"Roshni Patel","display_name_normalized":"Roshni + Patel","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g06d8eb9fe76","image_24":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_admin":true,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1601942634},{"id":"U01C33TL48J","team_id":"T01C6M7N136","name":"fire_roshni_api_pro2","deleted":false,"color":"674b1b","real_name":"Fire + - Roshni - API Project","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight + Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Fire + - Roshni - API Project","real_name_normalized":"Fire - Roshni - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g4bff6015394","api_app_id":"A01C98GFT5J","always_active":false,"bot_id":"B01BWBQTUEA","image_24":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1602017351},{"id":"U01CFJST9SM","team_id":"T01C6M7N136","name":"fire_roshni_api_proje","deleted":true,"profile":{"title":"","phone":"","skype":"","real_name":"Fire + - Roshni - API Project","real_name_normalized":"Fire - Roshni - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g0a5c0c0a39c","api_app_id":"A01CSQSKQE4","always_active":false,"bot_id":"B01CSR2C56U","first_name":"Fire","last_name":"- + Roshni - API Project","image_24":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_bot":true,"is_app_user":false,"updated":1602017279}],"cache_ts":1602042850,"response_metadata":{"next_cursor":""}}' + recorded_at: Wed, 07 Oct 2020 03:54:10 GMT +- request: + method: get + uri: https://slack.com/api/conversations.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: + Date: + - Wed, 07 Oct 2020 03:54:10 GMT + Server: + - Apache + X-Slack-Req-Id: + - 38213b617492eac4577262aa0d03b1ff + X-Oauth-Scopes: + - users:read,channels:read,chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '656' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-emc9,haproxy-edge-pdx-1350 + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channels":[{"id":"C01BKP7MWNB","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1601939539,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + channel is for... well, everything else. It\u2019s a place for team jokes, + spur-of-the-moment ideas, and funny GIFs. Go wild!","creator":"U01BKP7MGVD","last_set":1601939539},"previous_names":[],"num_members":2},{"id":"C01BKP8MF2T","name":"ada-c14-slack-cli-project","is_channel":true,"is_group":false,"is_im":false,"created":1601939581,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"ada-c14-slack-cli-project","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + *channel* is for working on a project. Hold meetings, share docs, and make + decisions together with your team.","creator":"U01BKP7MGVD","last_set":1601939581},"previous_names":[],"num_members":2},{"id":"C01C0MP03K5","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1601939538,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + is the one channel that will always include everyone. It\u2019s a great spot + for announcements and team-wide conversations.","creator":"U01BKP7MGVD","last_set":1601939538},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' + recorded_at: Wed, 07 Oct 2020 03:54:10 GMT +recorded_with: VCR 6.0.0 diff --git a/test/channel_test.rb b/test/channel_test.rb index 0b8bdac0..f5bf8c94 100644 --- a/test/channel_test.rb +++ b/test/channel_test.rb @@ -7,7 +7,8 @@ describe "Initialize method" do it "it creates an instance of channel" do - expect(@channel).must_be_kind_of Channel + expect(@channel).must_be_kind_of Recipient + expect(@channel).must_be_instance_of Channel expect(@channel.slack_id).must_equal "C01BKP7MWNB" expect(@channel.name).must_equal "random" expect(@channel.topic).must_equal "" diff --git a/test/user_test.rb b/test/user_test.rb index 4a36f938..825cea6d 100644 --- a/test/user_test.rb +++ b/test/user_test.rb @@ -7,7 +7,8 @@ describe 'constructor' do it "creates an instance of user with appropriate fields" do # Assert - expect(@user).must_be_kind_of User + expect(@user).must_be_instance_of User + expect(@user).must_be_kind_of Recipient expect(@user.slack_id).must_equal "USLACKBOT" expect(@user.name).must_equal "slackbot" expect(@user.real_name).must_equal "Slackbot" diff --git a/test/workspace_test.rb b/test/workspace_test.rb index e69de29b..bc6159b9 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -0,0 +1,38 @@ +require_relative 'test_helper' + +describe Workspace do + describe "constructor" do + before do + VCR.use_cassette("workspace") do + @ws = Workspace.new + end + end + it "correctly initializes workspace with a list of channels and users from Slack workspace" do + # Arrange and Act + VCR.use_cassette("workspace") do + user_list = User.list_all + channel_list = Channel.list_all + + # Assert + expect(@ws).must_be_instance_of Workspace + expect(@ws.users).must_be_instance_of Array + expect(@ws.channels).must_be_instance_of Array + user_list.length.times do |i| + expect(@ws.users[i]).must_be_kind_of User + expect(@ws.users[i].slack_id).must_equal user_list[i].slack_id + expect(@ws.users[i].name).must_equal user_list[i].name + expect(@ws.users[i].real_name).must_equal user_list[i].real_name + expect(@ws.users[i].status_text).must_equal user_list[i].status_text + expect(@ws.users[i].status_emoji).must_equal user_list[i].status_emoji + end + channel_list.length.times do |i| + expect(@ws.channels[i]).must_be_kind_of Channel + expect(@ws.channels[i].slack_id).must_equal channel_list[i].slack_id + expect(@ws.channels[i].name).must_equal channel_list[i].name + expect(@ws.channels[i].topic).must_equal channel_list[i].topic + expect(@ws.channels[i].member_count).must_equal channel_list[i].member_count + end + end + end + end +end \ No newline at end of file From a67a28f6722cc5d06c956184f18c1a6a405ad073 Mon Sep 17 00:00:00 2001 From: Pauline Chane Date: Wed, 7 Oct 2020 15:27:51 -0700 Subject: [PATCH 24/55] added and tested select_user and send_message in workspace.rb, added clarification line in slack.rb to reprint menu after every action, added sleep to get in recipient in case of infinite loop --- lib/recipient.rb | 1 + lib/slack.rb | 2 ++ lib/workspace.rb | 30 ++++++++++++++++++---- test/workspace_test.rb | 56 ++++++++++++++++++++++++++++++++++++++---- 4 files changed, 79 insertions(+), 10 deletions(-) diff --git a/lib/recipient.rb b/lib/recipient.rb index 1c942979..65754cfa 100644 --- a/lib/recipient.rb +++ b/lib/recipient.rb @@ -18,6 +18,7 @@ def send_message(message) # itself uses it, that the url is a valid url. def self.get(url, params) response = HTTParty.get(url, query: params) + sleep(0.5) raise SlackApiError if response.code != 200 || !response['ok'] return response end diff --git a/lib/slack.rb b/lib/slack.rb index 88b8f4bb..4f036377 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -27,6 +27,8 @@ def main else puts "That's not a valid option. Please try again." end + + puts "You may \n 1. list channels \n 2. list users \n 3. quit" end puts "Thank you for using the Ada Slack CLI!" diff --git a/lib/workspace.rb b/lib/workspace.rb index 33a00727..4e824339 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require_relative 'user' require_relative 'recipient' require_relative 'channel' @@ -13,18 +15,36 @@ def initialize end def select_channel(channel) - + # to be implemented end - def select_user(user) - + def select_user(user_info) + unless user_info.nil? # to use nil to reset selected field + user_s = user_info.to_s # in case a string isn't input + @users.each do |user| + # matches to slack_id or name (NOT real_name) + # returns input if successfully changed + if user.slack_id == user_s || user.name == user_s + @selected = user + return user_info + end + end + end + return nil # returns nil to indicate user not found end def send_message - + raise NotImplementedError, 'Wave 3' end def show_details + # returns nil if nothing is selected (sanity check) + # returns respective details for selected user or channel otherwise + return nil if @selected.nil? + + details = @selected.details + @selected = nil # reset so that CLI program doesn't try to read a previous entry + return details end -end \ No newline at end of file +end diff --git a/test/workspace_test.rb b/test/workspace_test.rb index bc6159b9..dc11fdd7 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -1,12 +1,12 @@ require_relative 'test_helper' describe Workspace do - describe "constructor" do - before do - VCR.use_cassette("workspace") do - @ws = Workspace.new - end + before do + VCR.use_cassette("workspace") do + @ws = Workspace.new end + end + describe "constructor" do it "correctly initializes workspace with a list of channels and users from Slack workspace" do # Arrange and Act VCR.use_cassette("workspace") do @@ -35,4 +35,50 @@ end end end + + describe "select_user" do + it "returns user input for successful match" do + slackbot = @ws.users.find{|user| user.slack_id == "USLACKBOT"} + + + @ws.select_user("slackbot") # by name + expect(@ws.selected).must_equal slackbot + + @ws.select_user(nil) # to reset + + @ws.select_user("USLACKBOT") # by ID + expect(@ws.selected).must_equal slackbot + end + it "returns nil for cases when user name/slack id are not matched" do + expect(@ws.select_user(nil)).must_be_nil + # slack usernames have a 21 character limit + expect(@ws.select_user("SlackSlackSlackSlackSlack")).must_be_nil + end + end + + describe "show_details" do + it "returns return of .details of recipient selected" do + @ws.select_user("slackbot") + temp_store = @ws.selected.details # since show_details resets selected, save this + user_detail = @ws.show_details + + # compare temp_store details with show_details results + expect(user_detail).must_be_instance_of Hash + expect(user_detail[:SLACK_ID]).must_equal temp_store[:SLACK_ID] + expect(user_detail[:NAME]).must_equal temp_store[:NAME] + expect(user_detail[:REAL_NAME]).must_equal temp_store[:REAL_NAME] + expect(user_detail[:STATUS_TEXT]).must_equal temp_store[:STATUS_TEXT] + expect(user_detail[:STATUS_EMOJI]).must_equal temp_store[:STATUS_EMOJI] + end + it 'resets @selected to nil upon pulling details' do + # select user and show its details + @ws.select_user("slackbot") + @ws.show_details + # show_details should resent @ws.selected + expect(@ws.selected).must_be_nil + end + it "returns nil if no recipient selected" do + expect(@ws.show_details).must_be_nil + end + end end \ No newline at end of file From b797ec7c2036fc4a07eb7c5789c95df21df8587a Mon Sep 17 00:00:00 2001 From: Pauline Chane Date: Wed, 7 Oct 2020 15:56:45 -0700 Subject: [PATCH 25/55] wrote a quick test for SlackApiError --- test/slack_api_error_test.rb | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 test/slack_api_error_test.rb diff --git a/test/slack_api_error_test.rb b/test/slack_api_error_test.rb new file mode 100644 index 00000000..dcc23439 --- /dev/null +++ b/test/slack_api_error_test.rb @@ -0,0 +1,9 @@ +require_relative 'test_helper' + +describe SlackApiError do + it 'creates a custom SlackApiError that inherits from StandardError' do + error = SlackApiError.new + expect(error).must_be_instance_of SlackApiError + expect(error).must_be_kind_of StandardError + end +end \ No newline at end of file From 9320a0359bf73107abcc0de538604e2a5ce8939d Mon Sep 17 00:00:00 2001 From: roshni-patel Date: Wed, 7 Oct 2020 20:07:31 -0500 Subject: [PATCH 26/55] Updated CLI for wave 2, wrote select channel method, and wrote select channel tests --- lib/slack.rb | 25 +++++++++++++++++++++++-- lib/workspace.rb | 13 +++++++++++-- test/workspace_test.rb | 20 ++++++++++++++++++++ 3 files changed, 54 insertions(+), 4 deletions(-) diff --git a/lib/slack.rb b/lib/slack.rb index 4f036377..c094982d 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -9,26 +9,47 @@ def main puts puts "This workspace has #{workspace.users.length} users and #{workspace.channels.length} channels" puts - puts "You may \n 1. list channels \n 2. list users \n 3. quit" + puts "Choose from the following \n 1. list channels \n 2. list users \n 3. select user \n 4. select channel \n 5. details \n 6. send message \n 7. quit" puts user_input = "" until user_input == "quit" puts "What would you like to do?" user_input = gets.strip.downcase + selected_recipient = nil case user_input when "list channels" tp workspace.channels, :slack_id, :name, :topic, :member_count when "list users" tp workspace.users, :slack_id, :name, :real_name, :status_text, :status_emoji + when "select user" + puts "Which user would you like to select?" + selected_recipient = gets.chomp + p workspace.select_user(selected_recipient) + if workspace.selected.nil? + puts "No user by the name #{selected_recipient} can be found." + end + when "select channel" + puts "Which channel would you like to select?" + selected_recipient = gets.chomp + workspace.select_channel(selected_recipient) + if workspace.selected.nil? + puts "No channel by the name #{selected_recipient} can be found." + end + when "details" + puts selected_recipient + workspace.show_details + #when "send message" + selected_recipient = nil when "quit" user_input = "quit" else puts "That's not a valid option. Please try again." end - puts "You may \n 1. list channels \n 2. list users \n 3. quit" + + puts "Choose from the following \n 1. list channels \n 2. list users \n 3. select user \n 4. select channel \n 5. details \n 6. quit" end puts "Thank you for using the Ada Slack CLI!" diff --git a/lib/workspace.rb b/lib/workspace.rb index 4e824339..1bf79137 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -14,8 +14,17 @@ def initialize @selected = nil end - def select_channel(channel) - # to be implemented + def select_channel(channel_info) + unless channel_info.nil? + channel_s = channel_info.to_s + @channels.each do |channel| + if channel.slack_id == channel_s || channel.name == channel_s + @selected = channel + return channel_info + end + end + end + return end def select_user(user_info) diff --git a/test/workspace_test.rb b/test/workspace_test.rb index dc11fdd7..99da071c 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -56,6 +56,26 @@ end end + describe "select_channel" do + it "returns channel input for successful match" do + slackbot = @ws.channels.find{|channel| channel.slack_id == "USLACKBOT"} + + + @ws.select_channel("slackbot") # by name + expect(@ws.selected).must_equal slackbot + + @ws.select_channel(nil) # to reset + + @ws.select_channel("USLACKBOT") # by ID + expect(@ws.selected).must_equal slackbot + end + it "returns nil for cases when channel name/slack id are not matched" do + expect(@ws.select_channel(nil)).must_be_nil + # slack usernames have a 21 character limit + expect(@ws.select_channel("SlackSlackSlackSlackSlack")).must_be_nil + end + end + describe "show_details" do it "returns return of .details of recipient selected" do @ws.select_user("slackbot") From 6fc0370710e36ace831f045e0cdee1ada2adbd83 Mon Sep 17 00:00:00 2001 From: Pauline Chane Date: Wed, 7 Oct 2020 18:16:17 -0700 Subject: [PATCH 27/55] added send_message method to workspace and recipient, minor edits to workspace select_channel test --- lib/recipient.rb | 28 +++++++++++++++++++++++++++- lib/workspace.rb | 9 +++++++-- test/workspace_test.rb | 10 +++++----- 3 files changed, 39 insertions(+), 8 deletions(-) diff --git a/lib/recipient.rb b/lib/recipient.rb index 65754cfa..0a3b8e4d 100644 --- a/lib/recipient.rb +++ b/lib/recipient.rb @@ -11,7 +11,32 @@ def initialize(slack_id: , name: ) # methods def send_message(message) - raise NotImplementedError, "i shall be implemented soon!!!" + # as recommended by Slack API for slack apps + if message.length > 4000 # message too long + # we don't want to break the program unless the API can't connect + # so we do a puts + puts "Message too long. Try again." + return false + end + url = ' https://slack.com/api/chat.postMessage' + query = {token: ENV['SLACK_TOKEN'], + text: message, + channel: @slack_id # to post to both users and channel + } + sleep(1) + response = HTTParty.post(url, query: query) + + # check for successful post + raise SlackApiError, "Failed request" if response.code != 200 + + unless response['ok'] + # we don't want to break the program unless the API can't connect + # so we do a puts + puts "Error: #{response['error']}. Please try again" + return false + end + + return true end # we are assuming, because the CLI user won't see the code and only the program @@ -20,6 +45,7 @@ def self.get(url, params) response = HTTParty.get(url, query: params) sleep(0.5) raise SlackApiError if response.code != 200 || !response['ok'] + return response end diff --git a/lib/workspace.rb b/lib/workspace.rb index 1bf79137..a787e04a 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -42,8 +42,13 @@ def select_user(user_info) return nil # returns nil to indicate user not found end - def send_message - raise NotImplementedError, 'Wave 3' + def send_message(message) + # returns nil if nothing is selected (sanity check) + # prints boolean from Recipient.send_message + return nil if @selected.nil? + # the driver will reset recipient if true + # otherwise will not reset until valid message + return @selected.send_message(message) # the driver will reset recipient if true end def show_details diff --git a/test/workspace_test.rb b/test/workspace_test.rb index 99da071c..53bf2e58 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -58,16 +58,16 @@ describe "select_channel" do it "returns channel input for successful match" do - slackbot = @ws.channels.find{|channel| channel.slack_id == "USLACKBOT"} + random = @ws.channels.find{|channel| channel.name == "random"} - @ws.select_channel("slackbot") # by name - expect(@ws.selected).must_equal slackbot + @ws.select_channel("random") # by name + expect(@ws.selected).must_equal random @ws.select_channel(nil) # to reset - @ws.select_channel("USLACKBOT") # by ID - expect(@ws.selected).must_equal slackbot + @ws.select_channel(random.slack_id) # by ID + expect(@ws.selected).must_equal random end it "returns nil for cases when channel name/slack id are not matched" do expect(@ws.select_channel(nil)).must_be_nil From 67287529dfd1cc3b4874f81060b02d704f0ff6de Mon Sep 17 00:00:00 2001 From: roshni-patel Date: Wed, 7 Oct 2020 20:18:23 -0500 Subject: [PATCH 28/55] Added error handling for details in case statement --- lib/slack.rb | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/slack.rb b/lib/slack.rb index c094982d..e3d9639b 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -26,19 +26,22 @@ def main when "select user" puts "Which user would you like to select?" selected_recipient = gets.chomp - p workspace.select_user(selected_recipient) + workspace.select_user(selected_recipient) if workspace.selected.nil? - puts "No user by the name #{selected_recipient} can be found." + puts "No user by the name #{selected_recipient} can be found. Please try again." end when "select channel" puts "Which channel would you like to select?" selected_recipient = gets.chomp workspace.select_channel(selected_recipient) if workspace.selected.nil? - puts "No channel by the name #{selected_recipient} can be found." + puts "No channel by the name #{selected_recipient} can be found. Please try again." end when "details" puts selected_recipient + if workspace.selected.nil? + puts "Please select a channel or user before asking for details." + end workspace.show_details #when "send message" selected_recipient = nil @@ -48,7 +51,6 @@ def main puts "That's not a valid option. Please try again." end - puts "Choose from the following \n 1. list channels \n 2. list users \n 3. select user \n 4. select channel \n 5. details \n 6. quit" end From e153bc86b5c250dbd4598779c9ec091867a7b80f Mon Sep 17 00:00:00 2001 From: Pauline Chane Date: Wed, 7 Oct 2020 18:28:43 -0700 Subject: [PATCH 29/55] laid out tests for send_message, added extra space to url recipient version... --- lib/recipient.rb | 28 +++++++++++++--------------- test/recipient_test.rb | 11 ++++++++++- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/lib/recipient.rb b/lib/recipient.rb index 0a3b8e4d..7cd01da4 100644 --- a/lib/recipient.rb +++ b/lib/recipient.rb @@ -4,7 +4,7 @@ class Recipient attr_reader :slack_id, :name - def initialize(slack_id: , name: ) + def initialize(slack_id:, name:) @slack_id = slack_id @name = name end @@ -18,21 +18,18 @@ def send_message(message) puts "Message too long. Try again." return false end - url = ' https://slack.com/api/chat.postMessage' - query = {token: ENV['SLACK_TOKEN'], - text: message, - channel: @slack_id # to post to both users and channel - } + url = 'https://slack.com/api/chat.postMessage' + query = { token: ENV['SLACK_TOKEN'], + text: message, + channel: @slack_id} # to post to both users and channel sleep(1) response = HTTParty.post(url, query: query) # check for successful post - raise SlackApiError, "Failed request" if response.code != 200 - - unless response['ok'] - # we don't want to break the program unless the API can't connect - # so we do a puts - puts "Error: #{response['error']}. Please try again" + unless response.parsed_response['ok'] && response.code == 200 + # we don't want to break the program here because the reason + # could be anything + puts "Error: #{response.parsed_response['error']}. Please try again" return false end @@ -44,8 +41,9 @@ def send_message(message) def self.get(url, params) response = HTTParty.get(url, query: params) sleep(0.5) - raise SlackApiError if response.code != 200 || !response['ok'] - + if response.code != 200 || !response.parsed_response['ok'] + raise SlackApiError, "Error: #{response.parsed_response['error']}. Please try again" + end return response end @@ -57,4 +55,4 @@ def details def self.list_all raise NotImplementedError, "implement me in child class" end -end \ No newline at end of file +end diff --git a/test/recipient_test.rb b/test/recipient_test.rb index 757ba1bd..045e9f3f 100644 --- a/test/recipient_test.rb +++ b/test/recipient_test.rb @@ -11,7 +11,16 @@ end describe 'send_message' do - # ADD TESTS DURING WAVE 3 + + it 'returns true for successful messages for channels AND users' do + + end + it "rejects messages longer than 4000 characters" do + + end + it "rejects 200 requests where 'ok' is false" do + + end end describe 'self.get' do it 'raises a SlackApiError if parameter input is invalid' do From 48e553ccd6ffd6ce1b87f06452174f9d8b14aa78 Mon Sep 17 00:00:00 2001 From: roshni-patel Date: Wed, 7 Oct 2020 20:35:38 -0500 Subject: [PATCH 30/55] Added send message option to CLI --- lib/slack.rb | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/slack.rb b/lib/slack.rb index e3d9639b..8647c3c1 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -43,15 +43,24 @@ def main puts "Please select a channel or user before asking for details." end workspace.show_details - #when "send message" selected_recipient = nil + when "send message" + puts selected_recipient + if workspace.selected.nil? + puts "Please select a channel or user before sending a message." + else + puts "What is the message you would like to send?" + message = gets.chomp + workspace.send_message(message) + message = nil + end when "quit" user_input = "quit" else puts "That's not a valid option. Please try again." end - puts "Choose from the following \n 1. list channels \n 2. list users \n 3. select user \n 4. select channel \n 5. details \n 6. quit" + puts "Choose from the following \n 1. list channels \n 2. list users \n 3. select user \n 4. select channel \n 5. details \n 6. send message \n 7. quit" end puts "Thank you for using the Ada Slack CLI!" From 3a4daf04b14767faab2cd899887131a3ed71d056 Mon Sep 17 00:00:00 2001 From: Pauline Chane Date: Wed, 7 Oct 2020 18:37:00 -0700 Subject: [PATCH 31/55] removed reset test and reset funciton in workspace.show_details --- lib/workspace.rb | 7 +------ test/recipient_test.rb | 5 ++++- test/workspace_test.rb | 7 ------- 3 files changed, 5 insertions(+), 14 deletions(-) diff --git a/lib/workspace.rb b/lib/workspace.rb index a787e04a..114f06a2 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -54,11 +54,6 @@ def send_message(message) def show_details # returns nil if nothing is selected (sanity check) # returns respective details for selected user or channel otherwise - return nil if @selected.nil? - - details = @selected.details - @selected = nil # reset so that CLI program doesn't try to read a previous entry - - return details + return @selected.nil? ? nil : @selected.details end end diff --git a/test/recipient_test.rb b/test/recipient_test.rb index 045e9f3f..fc1caf37 100644 --- a/test/recipient_test.rb +++ b/test/recipient_test.rb @@ -11,6 +11,9 @@ end describe 'send_message' do + before do + + end it 'returns true for successful messages for channels AND users' do @@ -18,7 +21,7 @@ it "rejects messages longer than 4000 characters" do end - it "rejects 200 requests where 'ok' is false" do + it "rejects attempts to send messages to invalid users/channels" do end end diff --git a/test/workspace_test.rb b/test/workspace_test.rb index 53bf2e58..fb304134 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -90,13 +90,6 @@ expect(user_detail[:STATUS_TEXT]).must_equal temp_store[:STATUS_TEXT] expect(user_detail[:STATUS_EMOJI]).must_equal temp_store[:STATUS_EMOJI] end - it 'resets @selected to nil upon pulling details' do - # select user and show its details - @ws.select_user("slackbot") - @ws.show_details - # show_details should resent @ws.selected - expect(@ws.selected).must_be_nil - end it "returns nil if no recipient selected" do expect(@ws.show_details).must_be_nil end From 20cc80303b4504c5a5879e6462f0753d8c4eb00c Mon Sep 17 00:00:00 2001 From: Pauline Chane Date: Wed, 7 Oct 2020 18:55:40 -0700 Subject: [PATCH 32/55] adding SLACK_TOKEN class constant to recipient --- lib/channel.rb | 2 +- lib/recipient.rb | 4 ++-- lib/user.rb | 2 +- lib/workspace.rb | 3 +-- test/recipient_test.rb | 2 +- 5 files changed, 6 insertions(+), 7 deletions(-) diff --git a/lib/channel.rb b/lib/channel.rb index fef728fd..8b3bca5d 100644 --- a/lib/channel.rb +++ b/lib/channel.rb @@ -24,7 +24,7 @@ def details def self.list_all url = "https://slack.com/api/conversations.list" - param = {token: ENV["SLACK_TOKEN"]} + param = {token: SLACK_TOKEN} raw_channels = Channel.get(url, param)['channels'] all_channels = raw_channels.map do |channel| Channel.new(slack_id: channel["id"], diff --git a/lib/recipient.rb b/lib/recipient.rb index 7cd01da4..c702cad2 100644 --- a/lib/recipient.rb +++ b/lib/recipient.rb @@ -3,7 +3,7 @@ class Recipient attr_reader :slack_id, :name - + SLACK_TOKEN = ENV['SLACK_TOKEN'] def initialize(slack_id:, name:) @slack_id = slack_id @name = name @@ -19,7 +19,7 @@ def send_message(message) return false end url = 'https://slack.com/api/chat.postMessage' - query = { token: ENV['SLACK_TOKEN'], + query = { token: SLACK_TOKEN, text: message, channel: @slack_id} # to post to both users and channel sleep(1) diff --git a/lib/user.rb b/lib/user.rb index 6060af42..6e784e1a 100644 --- a/lib/user.rb +++ b/lib/user.rb @@ -30,7 +30,7 @@ def details # class methods def self.list_all url = 'https://slack.com/api/users.list' - param = {token: ENV['SLACK_TOKEN']} + param = {token: SLACK_TOKEN} raw_users = User.get(url, param)['members'] all_users = raw_users.map do |member| User.new(slack_id: member['id'], diff --git a/lib/workspace.rb b/lib/workspace.rb index 114f06a2..dd2643aa 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -5,8 +5,7 @@ require_relative 'channel' class Workspace - attr_reader :users, :channels - attr_accessor :selected + attr_reader :users, :channels, :selected def initialize @users = User.list_all diff --git a/test/recipient_test.rb b/test/recipient_test.rb index fc1caf37..1d5449d8 100644 --- a/test/recipient_test.rb +++ b/test/recipient_test.rb @@ -12,7 +12,7 @@ describe 'send_message' do before do - + @test = Recipient.new(slack_id: "USLACKBOT",name: "slackbot") end it 'returns true for successful messages for channels AND users' do From 2e1da0b9be8c7464f4434850b730d2531e5f2d06 Mon Sep 17 00:00:00 2001 From: Pauline Chane Date: Wed, 7 Oct 2020 19:04:16 -0700 Subject: [PATCH 33/55] added clear_selection method to workspace --- lib/workspace.rb | 5 +++++ test/recipient_test.rb | 2 +- test/workspace_test.rb | 10 +++++++++- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/lib/workspace.rb b/lib/workspace.rb index dd2643aa..116737bf 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -41,6 +41,11 @@ def select_user(user_info) return nil # returns nil to indicate user not found end + # clear selected field + def clear_selection + @selected = nil + end + def send_message(message) # returns nil if nothing is selected (sanity check) # prints boolean from Recipient.send_message diff --git a/test/recipient_test.rb b/test/recipient_test.rb index 1d5449d8..8694898f 100644 --- a/test/recipient_test.rb +++ b/test/recipient_test.rb @@ -16,7 +16,7 @@ end it 'returns true for successful messages for channels AND users' do - + message = "hi" end it "rejects messages longer than 4000 characters" do diff --git a/test/workspace_test.rb b/test/workspace_test.rb index fb304134..fc4adecf 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -64,7 +64,7 @@ @ws.select_channel("random") # by name expect(@ws.selected).must_equal random - @ws.select_channel(nil) # to reset + @ws.clear_selection # to reset @ws.select_channel(random.slack_id) # by ID expect(@ws.selected).must_equal random @@ -76,6 +76,14 @@ end end + describe "clear_selection" do + it "clears @selected field in workspace" do + @ws.select_user("slackbot") + @ws.clear_selection + expect(@ws.selected).must_be_nil + end + end + describe "show_details" do it "returns return of .details of recipient selected" do @ws.select_user("slackbot") From 548752ec082e117c99f8e27899f62f663802688c Mon Sep 17 00:00:00 2001 From: Pauline Chane Date: Wed, 7 Oct 2020 20:29:43 -0700 Subject: [PATCH 34/55] fixed a lot of tests and added token method to recipient.rb, fixed SlackApiError calls in send_message --- lib/channel.rb | 5 +- lib/recipient.rb | 12 +- lib/slack.rb | 8 +- lib/user.rb | 8 +- test/cassettes/Recipient_get.yml | 126 +++++++++--------- test/cassettes/list_all.yml | 120 ++++++++--------- test/cassettes/send_message_to_recipient.yml | 130 +++++++++++++++++++ test/cassettes/workspace.yml | 40 +++--- test/channel_test.rb | 3 +- test/recipient_test.rb | 30 ++++- test/user_test.rb | 18 +-- test/workspace_test.rb | 8 +- 12 files changed, 329 insertions(+), 179 deletions(-) create mode 100644 test/cassettes/send_message_to_recipient.yml diff --git a/lib/channel.rb b/lib/channel.rb index 8b3bca5d..71236353 100644 --- a/lib/channel.rb +++ b/lib/channel.rb @@ -1,8 +1,5 @@ require_relative 'recipient' require 'table_print' -require 'dotenv' - -Dotenv.load class Channel < Recipient attr_reader :topic, :member_count @@ -24,7 +21,7 @@ def details def self.list_all url = "https://slack.com/api/conversations.list" - param = {token: SLACK_TOKEN} + param = {token: Channel.token} raw_channels = Channel.get(url, param)['channels'] all_channels = raw_channels.map do |channel| Channel.new(slack_id: channel["id"], diff --git a/lib/recipient.rb b/lib/recipient.rb index c702cad2..8fda36c7 100644 --- a/lib/recipient.rb +++ b/lib/recipient.rb @@ -1,9 +1,10 @@ require 'httparty' require_relative 'slack_api_error' + class Recipient attr_reader :slack_id, :name - SLACK_TOKEN = ENV['SLACK_TOKEN'] + # SLACK_TOKEN = ENV['SLACK_TOKEN'] def initialize(slack_id:, name:) @slack_id = slack_id @name = name @@ -15,11 +16,11 @@ def send_message(message) if message.length > 4000 # message too long # we don't want to break the program unless the API can't connect # so we do a puts - puts "Message too long. Try again." + raise SlackApiError, "Message too long. Try again." return false end url = 'https://slack.com/api/chat.postMessage' - query = { token: SLACK_TOKEN, + query = { token: Recipient.token, text: message, channel: @slack_id} # to post to both users and channel sleep(1) @@ -29,13 +30,16 @@ def send_message(message) unless response.parsed_response['ok'] && response.code == 200 # we don't want to break the program here because the reason # could be anything - puts "Error: #{response.parsed_response['error']}. Please try again" + raise SlackApiError, "Error: #{response.parsed_response['error']}. Please try again" return false end return true end + def self.token + return ENV['SLACK_TOKEN'] + end # we are assuming, because the CLI user won't see the code and only the program # itself uses it, that the url is a valid url. def self.get(url, params) diff --git a/lib/slack.rb b/lib/slack.rb index 8647c3c1..ead2f8b4 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -1,8 +1,10 @@ #!/usr/bin/env ruby require_relative 'workspace' require 'table_print' +require 'dotenv' def main + Dotenv.load puts "Welcome to the Ada Slack CLI!" workspace = Workspace.new @@ -51,7 +53,11 @@ def main else puts "What is the message you would like to send?" message = gets.chomp - workspace.send_message(message) + begin + workspace.send_message(message) + rescue SlackApiError => error + puts error.message + end message = nil end when "quit" diff --git a/lib/user.rb b/lib/user.rb index 6e784e1a..5285e2e7 100644 --- a/lib/user.rb +++ b/lib/user.rb @@ -1,9 +1,5 @@ require_relative 'recipient' -require 'dotenv' require 'table_print' -# require 'slack_api_error' - -Dotenv.load class User < Recipient @@ -11,7 +7,7 @@ class User < Recipient def initialize(slack_id:, name:, real_name:, status_text: '', status_emoji: '') super(slack_id: slack_id,name: name) - @real_name = real_name + @real_name = real_name || "" @status_text = status_text @status_emoji = status_emoji end @@ -30,7 +26,7 @@ def details # class methods def self.list_all url = 'https://slack.com/api/users.list' - param = {token: SLACK_TOKEN} + param = {token: User.token} raw_users = User.get(url, param)['members'] all_users = raw_users.map do |member| User.new(slack_id: member['id'], diff --git a/test/cassettes/Recipient_get.yml b/test/cassettes/Recipient_get.yml index b30e7d7d..2e151b4d 100644 --- a/test/cassettes/Recipient_get.yml +++ b/test/cassettes/Recipient_get.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: get - uri: https://slack.com/api/conversations.list?token= + uri: https://slack.com/api/conversations.list?token=blah body: encoding: US-ASCII string: '' @@ -19,59 +19,43 @@ http_interactions: message: OK headers: Date: - - Wed, 07 Oct 2020 01:40:10 GMT + - Thu, 08 Oct 2020 03:04:52 GMT Server: - Apache X-Slack-Req-Id: - - bc564fba3df7d27b9986e15af525b0cd - X-Oauth-Scopes: - - users:read,channels:read,chat:write - Access-Control-Expose-Headers: - - x-slack-req-id, retry-after - Access-Control-Allow-Origin: - - "*" + - 97eba3a9672fced144b9625e70b337ef + Referrer-Policy: + - no-referrer + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding X-Slack-Backend: - r + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after X-Content-Type-Options: - nosniff - Expires: - - Mon, 26 Jul 1997 05:00:00 GMT - Cache-Control: - - private, no-cache, no-store, must-revalidate X-Xss-Protection: - '0' - X-Accepted-Oauth-Scopes: - - channels:read,groups:read,mpim:read,im:read,read - Access-Control-Allow-Headers: - - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, - x-b3-sampled, x-b3-flags - Vary: - - Accept-Encoding - Pragma: - - no-cache - Strict-Transport-Security: - - max-age=31536000; includeSubDomains; preload - Referrer-Policy: - - no-referrer Content-Length: - - '656' + - '55' Content-Type: - application/json; charset=utf-8 X-Via: - - haproxy-www-wtop,haproxy-edge-pdx-ed3w + - haproxy-www-k2o1,haproxy-edge-pdx-f5k6 body: encoding: ASCII-8BIT - string: '{"ok":true,"channels":[{"id":"C01BKP7MWNB","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1601939539,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This - channel is for... well, everything else. It\u2019s a place for team jokes, - spur-of-the-moment ideas, and funny GIFs. Go wild!","creator":"U01BKP7MGVD","last_set":1601939539},"previous_names":[],"num_members":2},{"id":"C01BKP8MF2T","name":"ada-c14-slack-cli-project","is_channel":true,"is_group":false,"is_im":false,"created":1601939581,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"ada-c14-slack-cli-project","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This - *channel* is for working on a project. Hold meetings, share docs, and make - decisions together with your team.","creator":"U01BKP7MGVD","last_set":1601939581},"previous_names":[],"num_members":2},{"id":"C01C0MP03K5","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1601939538,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This - is the one channel that will always include everyone. It\u2019s a great spot - for announcements and team-wide conversations.","creator":"U01BKP7MGVD","last_set":1601939538},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' - recorded_at: Wed, 07 Oct 2020 01:40:10 GMT + string: '{"ok":false,"error":"invalid_auth"}' + recorded_at: Thu, 08 Oct 2020 03:04:52 GMT - request: method: get - uri: https://slack.com/api/conversations.list?token=blah + uri: https://slack.com/api/monkeys?token= body: encoding: US-ASCII string: '' @@ -88,11 +72,11 @@ http_interactions: message: OK headers: Date: - - Wed, 07 Oct 2020 01:48:29 GMT + - Thu, 08 Oct 2020 03:04:52 GMT Server: - Apache X-Slack-Req-Id: - - d9e79dfb1415c6fb8d18348ba23dc707 + - e24d4b53e7aaabae8c07fbc2d6192260 Referrer-Policy: - no-referrer Strict-Transport-Security: @@ -113,18 +97,18 @@ http_interactions: X-Xss-Protection: - '0' Content-Length: - - '55' + - '73' Content-Type: - application/json; charset=utf-8 X-Via: - - haproxy-www-od4o,haproxy-edge-pdx-333x + - haproxy-www-td7e,haproxy-edge-pdx-dhzt body: encoding: ASCII-8BIT - string: '{"ok":false,"error":"invalid_auth"}' - recorded_at: Wed, 07 Oct 2020 01:48:29 GMT + string: '{"ok":false,"error":"unknown_method","req_method":"monkeys"}' + recorded_at: Thu, 08 Oct 2020 03:04:52 GMT - request: method: get - uri: https://slack.com/api/monkeys?token= + uri: https://slack.com/api/conversations.list?token= body: encoding: US-ASCII string: '' @@ -141,38 +125,54 @@ http_interactions: message: OK headers: Date: - - Wed, 07 Oct 2020 01:48:39 GMT + - Thu, 08 Oct 2020 03:04:53 GMT Server: - Apache X-Slack-Req-Id: - - 0a1c78be94caf1c6411e5f7e0527b501 - Referrer-Policy: - - no-referrer - Strict-Transport-Security: - - max-age=31536000; includeSubDomains; preload - Access-Control-Allow-Headers: - - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, - x-b3-sampled, x-b3-flags - Vary: - - Accept-Encoding - X-Slack-Backend: - - r - Access-Control-Allow-Origin: - - "*" + - fe500907d342be65fba7cd417b835449 + X-Oauth-Scopes: + - users:read,channels:read,chat:write,incoming-webhook Access-Control-Expose-Headers: - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r X-Content-Type-Options: - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate X-Xss-Protection: - '0' + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer Content-Length: - - '73' + - '719' Content-Type: - application/json; charset=utf-8 X-Via: - - haproxy-www-bl82,haproxy-edge-pdx-vd1y + - haproxy-www-g9mv,haproxy-edge-pdx-1x0h body: encoding: ASCII-8BIT - string: '{"ok":false,"error":"unknown_method","req_method":"monkeys"}' - recorded_at: Wed, 07 Oct 2020 01:48:39 GMT + string: '{"ok":true,"channels":[{"id":"C01BKP7MWNB","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1601939539,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + channel is for... well, everything else. It\u2019s a place for team jokes, + spur-of-the-moment ideas, and funny GIFs. Go wild!","creator":"U01BKP7MGVD","last_set":1601939539},"previous_names":[],"num_members":4},{"id":"C01BKP8MF2T","name":"ada-c14-slack-cli-project","is_channel":true,"is_group":false,"is_im":false,"created":1601939581,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"ada-c14-slack-cli-project","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + *channel* is for working on a project. Hold meetings, share docs, and make + decisions together with your team.","creator":"U01BKP7MGVD","last_set":1601939581},"previous_names":[],"num_members":3},{"id":"C01C0MP03K5","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1601939538,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + is the one channel that will always include everyone. It\u2019s a great spot + for announcements and team-wide conversations.","creator":"U01BKP7MGVD","last_set":1601939538},"previous_names":[],"num_members":4},{"id":"C01C6J4TD7D","name":"do-not-add-bots","is_channel":true,"is_group":false,"is_im":false,"created":1602117099,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"do-not-add-bots","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"debugging","creator":"U01BKP7MGVD","last_set":1602117099},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' + recorded_at: Thu, 08 Oct 2020 03:04:53 GMT recorded_with: VCR 6.0.0 diff --git a/test/cassettes/list_all.yml b/test/cassettes/list_all.yml index 5db05543..4cd89680 100644 --- a/test/cassettes/list_all.yml +++ b/test/cassettes/list_all.yml @@ -19,13 +19,13 @@ http_interactions: message: OK headers: Date: - - Wed, 07 Oct 2020 03:00:47 GMT + - Thu, 08 Oct 2020 03:04:43 GMT Server: - Apache X-Slack-Req-Id: - - 2ee237d69bfeaf960cdd33478bf75692 + - 7a1dada93f49f9b80c787d3eae082ae3 X-Oauth-Scopes: - - users:read,channels:read,chat:write + - users:read,channels:read,chat:write,incoming-webhook Access-Control-Expose-Headers: - x-slack-req-id, retry-after Access-Control-Allow-Origin: @@ -54,21 +54,21 @@ http_interactions: Referrer-Policy: - no-referrer Content-Length: - - '656' + - '719' Content-Type: - application/json; charset=utf-8 X-Via: - - haproxy-www-9rc7,haproxy-edge-pdx-jlix + - haproxy-www-wmb9,haproxy-edge-pdx-68eo body: encoding: ASCII-8BIT - string: '{"ok":true,"channels":[{"id":"C01BKP7MWNB","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1601939539,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + string: '{"ok":true,"channels":[{"id":"C01BKP7MWNB","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1601939539,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This channel is for... well, everything else. It\u2019s a place for team jokes, - spur-of-the-moment ideas, and funny GIFs. Go wild!","creator":"U01BKP7MGVD","last_set":1601939539},"previous_names":[],"num_members":2},{"id":"C01BKP8MF2T","name":"ada-c14-slack-cli-project","is_channel":true,"is_group":false,"is_im":false,"created":1601939581,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"ada-c14-slack-cli-project","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + spur-of-the-moment ideas, and funny GIFs. Go wild!","creator":"U01BKP7MGVD","last_set":1601939539},"previous_names":[],"num_members":4},{"id":"C01BKP8MF2T","name":"ada-c14-slack-cli-project","is_channel":true,"is_group":false,"is_im":false,"created":1601939581,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"ada-c14-slack-cli-project","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This *channel* is for working on a project. Hold meetings, share docs, and make - decisions together with your team.","creator":"U01BKP7MGVD","last_set":1601939581},"previous_names":[],"num_members":2},{"id":"C01C0MP03K5","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1601939538,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + decisions together with your team.","creator":"U01BKP7MGVD","last_set":1601939581},"previous_names":[],"num_members":3},{"id":"C01C0MP03K5","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1601939538,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This is the one channel that will always include everyone. It\u2019s a great spot - for announcements and team-wide conversations.","creator":"U01BKP7MGVD","last_set":1601939538},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' - recorded_at: Wed, 07 Oct 2020 03:00:47 GMT + for announcements and team-wide conversations.","creator":"U01BKP7MGVD","last_set":1601939538},"previous_names":[],"num_members":4},{"id":"C01C6J4TD7D","name":"do-not-add-bots","is_channel":true,"is_group":false,"is_im":false,"created":1602117099,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"do-not-add-bots","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"debugging","creator":"U01BKP7MGVD","last_set":1602117099},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' + recorded_at: Thu, 08 Oct 2020 03:04:43 GMT - request: method: get uri: https://slack.com/api/conversations.list?token= @@ -88,13 +88,13 @@ http_interactions: message: OK headers: Date: - - Wed, 07 Oct 2020 03:00:48 GMT + - Thu, 08 Oct 2020 03:04:43 GMT Server: - Apache X-Slack-Req-Id: - - fe4a407bd6b330c4890d2e9bab60e1b7 + - 69e6187da506b22420f8ad5c0fa2bb8d X-Oauth-Scopes: - - users:read,channels:read,chat:write + - users:read,channels:read,chat:write,incoming-webhook Access-Control-Expose-Headers: - x-slack-req-id, retry-after Access-Control-Allow-Origin: @@ -123,21 +123,21 @@ http_interactions: Referrer-Policy: - no-referrer Content-Length: - - '656' + - '719' Content-Type: - application/json; charset=utf-8 X-Via: - - haproxy-www-kuqq,haproxy-edge-pdx-ylha + - haproxy-www-91vl,haproxy-edge-pdx-uln4 body: encoding: ASCII-8BIT - string: '{"ok":true,"channels":[{"id":"C01BKP7MWNB","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1601939539,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + string: '{"ok":true,"channels":[{"id":"C01BKP7MWNB","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1601939539,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This channel is for... well, everything else. It\u2019s a place for team jokes, - spur-of-the-moment ideas, and funny GIFs. Go wild!","creator":"U01BKP7MGVD","last_set":1601939539},"previous_names":[],"num_members":2},{"id":"C01BKP8MF2T","name":"ada-c14-slack-cli-project","is_channel":true,"is_group":false,"is_im":false,"created":1601939581,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"ada-c14-slack-cli-project","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + spur-of-the-moment ideas, and funny GIFs. Go wild!","creator":"U01BKP7MGVD","last_set":1601939539},"previous_names":[],"num_members":4},{"id":"C01BKP8MF2T","name":"ada-c14-slack-cli-project","is_channel":true,"is_group":false,"is_im":false,"created":1601939581,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"ada-c14-slack-cli-project","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This *channel* is for working on a project. Hold meetings, share docs, and make - decisions together with your team.","creator":"U01BKP7MGVD","last_set":1601939581},"previous_names":[],"num_members":2},{"id":"C01C0MP03K5","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1601939538,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + decisions together with your team.","creator":"U01BKP7MGVD","last_set":1601939581},"previous_names":[],"num_members":3},{"id":"C01C0MP03K5","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1601939538,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This is the one channel that will always include everyone. It\u2019s a great spot - for announcements and team-wide conversations.","creator":"U01BKP7MGVD","last_set":1601939538},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' - recorded_at: Wed, 07 Oct 2020 03:00:48 GMT + for announcements and team-wide conversations.","creator":"U01BKP7MGVD","last_set":1601939538},"previous_names":[],"num_members":4},{"id":"C01C6J4TD7D","name":"do-not-add-bots","is_channel":true,"is_group":false,"is_im":false,"created":1602117099,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"do-not-add-bots","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"debugging","creator":"U01BKP7MGVD","last_set":1602117099},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' + recorded_at: Thu, 08 Oct 2020 03:04:43 GMT - request: method: get uri: https://slack.com/api/conversations.list?token= @@ -157,13 +157,13 @@ http_interactions: message: OK headers: Date: - - Wed, 07 Oct 2020 03:00:48 GMT + - Thu, 08 Oct 2020 03:04:44 GMT Server: - Apache X-Slack-Req-Id: - - d3c1fdbc9559e110f7d35eaa1bdac535 + - 82185115ec4b83869bf8cf69588bd0ab X-Oauth-Scopes: - - users:read,channels:read,chat:write + - users:read,channels:read,chat:write,incoming-webhook Access-Control-Expose-Headers: - x-slack-req-id, retry-after Access-Control-Allow-Origin: @@ -192,21 +192,21 @@ http_interactions: Referrer-Policy: - no-referrer Content-Length: - - '656' + - '719' Content-Type: - application/json; charset=utf-8 X-Via: - - haproxy-www-5dq3,haproxy-edge-pdx-1cbr + - haproxy-www-ellj,haproxy-edge-pdx-ylha body: encoding: ASCII-8BIT - string: '{"ok":true,"channels":[{"id":"C01BKP7MWNB","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1601939539,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + string: '{"ok":true,"channels":[{"id":"C01BKP7MWNB","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1601939539,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This channel is for... well, everything else. It\u2019s a place for team jokes, - spur-of-the-moment ideas, and funny GIFs. Go wild!","creator":"U01BKP7MGVD","last_set":1601939539},"previous_names":[],"num_members":2},{"id":"C01BKP8MF2T","name":"ada-c14-slack-cli-project","is_channel":true,"is_group":false,"is_im":false,"created":1601939581,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"ada-c14-slack-cli-project","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + spur-of-the-moment ideas, and funny GIFs. Go wild!","creator":"U01BKP7MGVD","last_set":1601939539},"previous_names":[],"num_members":4},{"id":"C01BKP8MF2T","name":"ada-c14-slack-cli-project","is_channel":true,"is_group":false,"is_im":false,"created":1601939581,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"ada-c14-slack-cli-project","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This *channel* is for working on a project. Hold meetings, share docs, and make - decisions together with your team.","creator":"U01BKP7MGVD","last_set":1601939581},"previous_names":[],"num_members":2},{"id":"C01C0MP03K5","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1601939538,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + decisions together with your team.","creator":"U01BKP7MGVD","last_set":1601939581},"previous_names":[],"num_members":3},{"id":"C01C0MP03K5","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1601939538,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This is the one channel that will always include everyone. It\u2019s a great spot - for announcements and team-wide conversations.","creator":"U01BKP7MGVD","last_set":1601939538},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' - recorded_at: Wed, 07 Oct 2020 03:00:48 GMT + for announcements and team-wide conversations.","creator":"U01BKP7MGVD","last_set":1601939538},"previous_names":[],"num_members":4},{"id":"C01C6J4TD7D","name":"do-not-add-bots","is_channel":true,"is_group":false,"is_im":false,"created":1602117099,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"do-not-add-bots","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"debugging","creator":"U01BKP7MGVD","last_set":1602117099},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' + recorded_at: Thu, 08 Oct 2020 03:04:44 GMT - request: method: get uri: https://slack.com/api/users.list?token= @@ -226,13 +226,13 @@ http_interactions: message: OK headers: Date: - - Wed, 07 Oct 2020 03:28:31 GMT + - Thu, 08 Oct 2020 03:04:47 GMT Server: - Apache X-Slack-Req-Id: - - 03271dcffd7120f1a1b51f4799e7e6c8 + - 55e129c09da566ae2da8a998dcedb4a9 X-Oauth-Scopes: - - users:read,channels:read,chat:write + - users:read,channels:read,chat:write,incoming-webhook Access-Control-Expose-Headers: - x-slack-req-id, retry-after Access-Control-Allow-Origin: @@ -261,28 +261,28 @@ http_interactions: Referrer-Policy: - no-referrer Content-Length: - - '1403' + - '1448' Content-Type: - application/json; charset=utf-8 X-Via: - - haproxy-www-mki5,haproxy-edge-pdx-0i42 + - haproxy-www-invn,haproxy-edge-pdx-r6b3 body: encoding: ASCII-8BIT string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"T01C6M7N136","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":"America\/Los_Angeles","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":"T01C6M7N136"},"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":"U01BKP7MGVD","team_id":"T01C6M7N136","name":"pauline.chane","deleted":false,"color":"9f69e7","real_name":"pauline.chane","tz":"America\/Los_Angeles","tz_label":"Pacific - Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"pauline.chane","real_name_normalized":"pauline.chane","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gac6154e1c22","image_24":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png","status_text_canonical":"","team":"T01C6M7N136"},"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":1601939538},{"id":"U01BW7XP2KY","team_id":"T01C6M7N136","name":"fire_pauline_slack_cl","deleted":false,"color":"e7392d","real_name":"Fire + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"pauline.chane","real_name_normalized":"pauline.chane","display_name":"","display_name_normalized":"","fields":null,"status_text":"HI + ROSHNI","status_emoji":":heart:","status_expiration":1602140399,"avatar_hash":"gac6154e1c22","image_24":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png","status_text_canonical":"","team":"T01C6M7N136"},"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":1602119098},{"id":"U01BW7XP2KY","team_id":"T01C6M7N136","name":"fire_pauline_slack_cl","deleted":false,"color":"e7392d","real_name":"Fire - Pauline - Slack CLI","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Fire - Pauline - Slack CLI","real_name_normalized":"Fire - Pauline - Slack CLI","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gd69838ab849","api_app_id":"A01BZS74GDB","always_active":false,"bot_id":"B01C94S0PMJ","image_24":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1602014193},{"id":"U01BXCZPJBF","team_id":"T01C6M7N136","name":"rpatel01","deleted":false,"color":"4bbe2e","real_name":"Roshni Patel","tz":"America\/Chicago","tz_label":"Central Daylight Time","tz_offset":-18000,"profile":{"title":"","phone":"","skype":"","real_name":"Roshni - Patel","real_name_normalized":"Roshni Patel","display_name":"Roshni Patel","display_name_normalized":"Roshni - Patel","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g06d8eb9fe76","image_24":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_admin":true,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1601942634},{"id":"U01C33TL48J","team_id":"T01C6M7N136","name":"fire_roshni_api_pro2","deleted":false,"color":"674b1b","real_name":"Fire + Patel","real_name_normalized":"Roshni Patel","display_name":"roshni.patel","display_name_normalized":"roshni.patel","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g06d8eb9fe76","first_name":"Roshni","last_name":"Patel","image_24":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_admin":true,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1602115573},{"id":"U01C33TL48J","team_id":"T01C6M7N136","name":"fire_roshni_api_pro2","deleted":false,"color":"674b1b","real_name":"Fire - Roshni - API Project","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Fire - Roshni - API Project","real_name_normalized":"Fire - Roshni - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g4bff6015394","api_app_id":"A01C98GFT5J","always_active":false,"bot_id":"B01BWBQTUEA","image_24":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1602017351},{"id":"U01CFJST9SM","team_id":"T01C6M7N136","name":"fire_roshni_api_proje","deleted":true,"profile":{"title":"","phone":"","skype":"","real_name":"Fire - Roshni - API Project","real_name_normalized":"Fire - Roshni - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g0a5c0c0a39c","api_app_id":"A01CSQSKQE4","always_active":false,"bot_id":"B01CSR2C56U","first_name":"Fire","last_name":"- - Roshni - API Project","image_24":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_bot":true,"is_app_user":false,"updated":1602017279}],"cache_ts":1602041311,"response_metadata":{"next_cursor":""}}' - recorded_at: Wed, 07 Oct 2020 03:28:31 GMT + Roshni - API Project","image_24":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_bot":true,"is_app_user":false,"updated":1602017279}],"cache_ts":1602126287,"response_metadata":{"next_cursor":""}}' + recorded_at: Thu, 08 Oct 2020 03:04:47 GMT - request: method: get uri: https://slack.com/api/users.list?token= @@ -302,13 +302,13 @@ http_interactions: message: OK headers: Date: - - Wed, 07 Oct 2020 03:28:32 GMT + - Thu, 08 Oct 2020 03:04:47 GMT Server: - Apache X-Slack-Req-Id: - - 63c4fb2e4d78f45fbf8450021038ed8a + - 4e53860d4546ca37c5d9e16b56ebe4bc X-Oauth-Scopes: - - users:read,channels:read,chat:write + - users:read,channels:read,chat:write,incoming-webhook Access-Control-Expose-Headers: - x-slack-req-id, retry-after Access-Control-Allow-Origin: @@ -337,28 +337,28 @@ http_interactions: Referrer-Policy: - no-referrer Content-Length: - - '1403' + - '1448' Content-Type: - application/json; charset=utf-8 X-Via: - - haproxy-www-xfba,haproxy-edge-pdx-74gg + - haproxy-www-nkyk,haproxy-edge-pdx-0i42 body: encoding: ASCII-8BIT string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"T01C6M7N136","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":"America\/Los_Angeles","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":"T01C6M7N136"},"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":"U01BKP7MGVD","team_id":"T01C6M7N136","name":"pauline.chane","deleted":false,"color":"9f69e7","real_name":"pauline.chane","tz":"America\/Los_Angeles","tz_label":"Pacific - Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"pauline.chane","real_name_normalized":"pauline.chane","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gac6154e1c22","image_24":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png","status_text_canonical":"","team":"T01C6M7N136"},"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":1601939538},{"id":"U01BW7XP2KY","team_id":"T01C6M7N136","name":"fire_pauline_slack_cl","deleted":false,"color":"e7392d","real_name":"Fire + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"pauline.chane","real_name_normalized":"pauline.chane","display_name":"","display_name_normalized":"","fields":null,"status_text":"HI + ROSHNI","status_emoji":":heart:","status_expiration":1602140399,"avatar_hash":"gac6154e1c22","image_24":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png","status_text_canonical":"","team":"T01C6M7N136"},"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":1602119098},{"id":"U01BW7XP2KY","team_id":"T01C6M7N136","name":"fire_pauline_slack_cl","deleted":false,"color":"e7392d","real_name":"Fire - Pauline - Slack CLI","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Fire - Pauline - Slack CLI","real_name_normalized":"Fire - Pauline - Slack CLI","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gd69838ab849","api_app_id":"A01BZS74GDB","always_active":false,"bot_id":"B01C94S0PMJ","image_24":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1602014193},{"id":"U01BXCZPJBF","team_id":"T01C6M7N136","name":"rpatel01","deleted":false,"color":"4bbe2e","real_name":"Roshni Patel","tz":"America\/Chicago","tz_label":"Central Daylight Time","tz_offset":-18000,"profile":{"title":"","phone":"","skype":"","real_name":"Roshni - Patel","real_name_normalized":"Roshni Patel","display_name":"Roshni Patel","display_name_normalized":"Roshni - Patel","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g06d8eb9fe76","image_24":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_admin":true,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1601942634},{"id":"U01C33TL48J","team_id":"T01C6M7N136","name":"fire_roshni_api_pro2","deleted":false,"color":"674b1b","real_name":"Fire + Patel","real_name_normalized":"Roshni Patel","display_name":"roshni.patel","display_name_normalized":"roshni.patel","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g06d8eb9fe76","first_name":"Roshni","last_name":"Patel","image_24":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_admin":true,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1602115573},{"id":"U01C33TL48J","team_id":"T01C6M7N136","name":"fire_roshni_api_pro2","deleted":false,"color":"674b1b","real_name":"Fire - Roshni - API Project","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Fire - Roshni - API Project","real_name_normalized":"Fire - Roshni - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g4bff6015394","api_app_id":"A01C98GFT5J","always_active":false,"bot_id":"B01BWBQTUEA","image_24":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1602017351},{"id":"U01CFJST9SM","team_id":"T01C6M7N136","name":"fire_roshni_api_proje","deleted":true,"profile":{"title":"","phone":"","skype":"","real_name":"Fire - Roshni - API Project","real_name_normalized":"Fire - Roshni - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g0a5c0c0a39c","api_app_id":"A01CSQSKQE4","always_active":false,"bot_id":"B01CSR2C56U","first_name":"Fire","last_name":"- - Roshni - API Project","image_24":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_bot":true,"is_app_user":false,"updated":1602017279}],"cache_ts":1602041312,"response_metadata":{"next_cursor":""}}' - recorded_at: Wed, 07 Oct 2020 03:28:32 GMT + Roshni - API Project","image_24":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_bot":true,"is_app_user":false,"updated":1602017279}],"cache_ts":1602126287,"response_metadata":{"next_cursor":""}}' + recorded_at: Thu, 08 Oct 2020 03:04:47 GMT - request: method: get uri: https://slack.com/api/users.list?token= @@ -378,13 +378,13 @@ http_interactions: message: OK headers: Date: - - Wed, 07 Oct 2020 03:29:01 GMT + - Thu, 08 Oct 2020 03:04:48 GMT Server: - Apache X-Slack-Req-Id: - - a09997eda8d383042dca9409bc93caea + - dc7ca48a902d14a6f26c3c9185dad726 X-Oauth-Scopes: - - users:read,channels:read,chat:write + - users:read,channels:read,chat:write,incoming-webhook Access-Control-Expose-Headers: - x-slack-req-id, retry-after Access-Control-Allow-Origin: @@ -413,26 +413,26 @@ http_interactions: Referrer-Policy: - no-referrer Content-Length: - - '1403' + - '1448' Content-Type: - application/json; charset=utf-8 X-Via: - - haproxy-www-e13u,haproxy-edge-pdx-1nke + - haproxy-www-z1hq,haproxy-edge-pdx-vd1y body: encoding: ASCII-8BIT string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"T01C6M7N136","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":"America\/Los_Angeles","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":"T01C6M7N136"},"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":"U01BKP7MGVD","team_id":"T01C6M7N136","name":"pauline.chane","deleted":false,"color":"9f69e7","real_name":"pauline.chane","tz":"America\/Los_Angeles","tz_label":"Pacific - Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"pauline.chane","real_name_normalized":"pauline.chane","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gac6154e1c22","image_24":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png","status_text_canonical":"","team":"T01C6M7N136"},"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":1601939538},{"id":"U01BW7XP2KY","team_id":"T01C6M7N136","name":"fire_pauline_slack_cl","deleted":false,"color":"e7392d","real_name":"Fire + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"pauline.chane","real_name_normalized":"pauline.chane","display_name":"","display_name_normalized":"","fields":null,"status_text":"HI + ROSHNI","status_emoji":":heart:","status_expiration":1602140399,"avatar_hash":"gac6154e1c22","image_24":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png","status_text_canonical":"","team":"T01C6M7N136"},"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":1602119098},{"id":"U01BW7XP2KY","team_id":"T01C6M7N136","name":"fire_pauline_slack_cl","deleted":false,"color":"e7392d","real_name":"Fire - Pauline - Slack CLI","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Fire - Pauline - Slack CLI","real_name_normalized":"Fire - Pauline - Slack CLI","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gd69838ab849","api_app_id":"A01BZS74GDB","always_active":false,"bot_id":"B01C94S0PMJ","image_24":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1602014193},{"id":"U01BXCZPJBF","team_id":"T01C6M7N136","name":"rpatel01","deleted":false,"color":"4bbe2e","real_name":"Roshni Patel","tz":"America\/Chicago","tz_label":"Central Daylight Time","tz_offset":-18000,"profile":{"title":"","phone":"","skype":"","real_name":"Roshni - Patel","real_name_normalized":"Roshni Patel","display_name":"Roshni Patel","display_name_normalized":"Roshni - Patel","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g06d8eb9fe76","image_24":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_admin":true,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1601942634},{"id":"U01C33TL48J","team_id":"T01C6M7N136","name":"fire_roshni_api_pro2","deleted":false,"color":"674b1b","real_name":"Fire + Patel","real_name_normalized":"Roshni Patel","display_name":"roshni.patel","display_name_normalized":"roshni.patel","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g06d8eb9fe76","first_name":"Roshni","last_name":"Patel","image_24":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_admin":true,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1602115573},{"id":"U01C33TL48J","team_id":"T01C6M7N136","name":"fire_roshni_api_pro2","deleted":false,"color":"674b1b","real_name":"Fire - Roshni - API Project","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Fire - Roshni - API Project","real_name_normalized":"Fire - Roshni - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g4bff6015394","api_app_id":"A01C98GFT5J","always_active":false,"bot_id":"B01BWBQTUEA","image_24":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1602017351},{"id":"U01CFJST9SM","team_id":"T01C6M7N136","name":"fire_roshni_api_proje","deleted":true,"profile":{"title":"","phone":"","skype":"","real_name":"Fire - Roshni - API Project","real_name_normalized":"Fire - Roshni - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g0a5c0c0a39c","api_app_id":"A01CSQSKQE4","always_active":false,"bot_id":"B01CSR2C56U","first_name":"Fire","last_name":"- - Roshni - API Project","image_24":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_bot":true,"is_app_user":false,"updated":1602017279}],"cache_ts":1602041341,"response_metadata":{"next_cursor":""}}' - recorded_at: Wed, 07 Oct 2020 03:29:01 GMT + Roshni - API Project","image_24":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_bot":true,"is_app_user":false,"updated":1602017279}],"cache_ts":1602126288,"response_metadata":{"next_cursor":""}}' + recorded_at: Thu, 08 Oct 2020 03:04:48 GMT recorded_with: VCR 6.0.0 diff --git a/test/cassettes/send_message_to_recipient.yml b/test/cassettes/send_message_to_recipient.yml new file mode 100644 index 00000000..119cd26f --- /dev/null +++ b/test/cassettes/send_message_to_recipient.yml @@ -0,0 +1,130 @@ +--- +http_interactions: +- request: + method: post + uri: https://slack.com/api/chat.postMessage?channel=0000000000000000000000&text=testing&token= + body: + encoding: UTF-8 + 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: + Date: + - Thu, 08 Oct 2020 03:04:55 GMT + Server: + - Apache + X-Slack-Req-Id: + - 73fa2c5a01558943a4a3d4947202e064 + X-Oauth-Scopes: + - users:read,channels:read,chat:write,incoming-webhook + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - chat:write + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '60' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-w9x0,haproxy-edge-pdx-wg8q + body: + encoding: ASCII-8BIT + string: '{"ok":false,"error":"channel_not_found"}' + recorded_at: Thu, 08 Oct 2020 03:04:55 GMT +- request: + method: post + uri: https://slack.com/api/chat.postMessage?channel=USLACKBOT&text=maracuyA&token= + body: + encoding: UTF-8 + 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: + Date: + - Thu, 08 Oct 2020 03:04:57 GMT + Server: + - Apache + X-Slack-Req-Id: + - d7e171f046a3a148617dd1e10d02abd8 + X-Oauth-Scopes: + - users:read,channels:read,chat:write,incoming-webhook + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - chat:write + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '336' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-a9vn,haproxy-edge-pdx-n5m8 + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channel":"D01CSQTE4QG","ts":"1602126297.000100","message":{"bot_id":"B01C94S0PMJ","type":"message","text":"maracuyA","user":"U01BW7XP2KY","ts":"1602126297.000100","team":"T01C6M7N136","bot_profile":{"id":"B01C94S0PMJ","deleted":false,"name":"Fire + - Pauline - Slack CLI","updated":1602014193,"app_id":"A01BZS74GDB","icons":{"image_36":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_36.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/service_72.png"},"team_id":"T01C6M7N136"}}}' + recorded_at: Thu, 08 Oct 2020 03:04:57 GMT +recorded_with: VCR 6.0.0 diff --git a/test/cassettes/workspace.yml b/test/cassettes/workspace.yml index 1d79c062..c38b1677 100644 --- a/test/cassettes/workspace.yml +++ b/test/cassettes/workspace.yml @@ -19,13 +19,13 @@ http_interactions: message: OK headers: Date: - - Wed, 07 Oct 2020 03:54:10 GMT + - Thu, 08 Oct 2020 03:04:41 GMT Server: - Apache X-Slack-Req-Id: - - beb6d8e87931ae309016b09cc3314333 + - ef6d4bbf6ad04d27c41d0defc6353ea1 X-Oauth-Scopes: - - users:read,channels:read,chat:write + - users:read,channels:read,chat:write,incoming-webhook Access-Control-Expose-Headers: - x-slack-req-id, retry-after Access-Control-Allow-Origin: @@ -54,28 +54,28 @@ http_interactions: Referrer-Policy: - no-referrer Content-Length: - - '1402' + - '1448' Content-Type: - application/json; charset=utf-8 X-Via: - - haproxy-www-008d,haproxy-edge-pdx-locq + - haproxy-www-x7jt,haproxy-edge-pdx-5vxz body: encoding: ASCII-8BIT string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"T01C6M7N136","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":"America\/Los_Angeles","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":"T01C6M7N136"},"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":"U01BKP7MGVD","team_id":"T01C6M7N136","name":"pauline.chane","deleted":false,"color":"9f69e7","real_name":"pauline.chane","tz":"America\/Los_Angeles","tz_label":"Pacific - Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"pauline.chane","real_name_normalized":"pauline.chane","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gac6154e1c22","image_24":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png","status_text_canonical":"","team":"T01C6M7N136"},"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":1601939538},{"id":"U01BW7XP2KY","team_id":"T01C6M7N136","name":"fire_pauline_slack_cl","deleted":false,"color":"e7392d","real_name":"Fire + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"pauline.chane","real_name_normalized":"pauline.chane","display_name":"","display_name_normalized":"","fields":null,"status_text":"HI + ROSHNI","status_emoji":":heart:","status_expiration":1602140399,"avatar_hash":"gac6154e1c22","image_24":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png","status_text_canonical":"","team":"T01C6M7N136"},"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":1602119098},{"id":"U01BW7XP2KY","team_id":"T01C6M7N136","name":"fire_pauline_slack_cl","deleted":false,"color":"e7392d","real_name":"Fire - Pauline - Slack CLI","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Fire - Pauline - Slack CLI","real_name_normalized":"Fire - Pauline - Slack CLI","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gd69838ab849","api_app_id":"A01BZS74GDB","always_active":false,"bot_id":"B01C94S0PMJ","image_24":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1602014193},{"id":"U01BXCZPJBF","team_id":"T01C6M7N136","name":"rpatel01","deleted":false,"color":"4bbe2e","real_name":"Roshni Patel","tz":"America\/Chicago","tz_label":"Central Daylight Time","tz_offset":-18000,"profile":{"title":"","phone":"","skype":"","real_name":"Roshni - Patel","real_name_normalized":"Roshni Patel","display_name":"Roshni Patel","display_name_normalized":"Roshni - Patel","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g06d8eb9fe76","image_24":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_admin":true,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1601942634},{"id":"U01C33TL48J","team_id":"T01C6M7N136","name":"fire_roshni_api_pro2","deleted":false,"color":"674b1b","real_name":"Fire + Patel","real_name_normalized":"Roshni Patel","display_name":"roshni.patel","display_name_normalized":"roshni.patel","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g06d8eb9fe76","first_name":"Roshni","last_name":"Patel","image_24":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_admin":true,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1602115573},{"id":"U01C33TL48J","team_id":"T01C6M7N136","name":"fire_roshni_api_pro2","deleted":false,"color":"674b1b","real_name":"Fire - Roshni - API Project","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Fire - Roshni - API Project","real_name_normalized":"Fire - Roshni - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g4bff6015394","api_app_id":"A01C98GFT5J","always_active":false,"bot_id":"B01BWBQTUEA","image_24":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1602017351},{"id":"U01CFJST9SM","team_id":"T01C6M7N136","name":"fire_roshni_api_proje","deleted":true,"profile":{"title":"","phone":"","skype":"","real_name":"Fire - Roshni - API Project","real_name_normalized":"Fire - Roshni - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g0a5c0c0a39c","api_app_id":"A01CSQSKQE4","always_active":false,"bot_id":"B01CSR2C56U","first_name":"Fire","last_name":"- - Roshni - API Project","image_24":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_bot":true,"is_app_user":false,"updated":1602017279}],"cache_ts":1602042850,"response_metadata":{"next_cursor":""}}' - recorded_at: Wed, 07 Oct 2020 03:54:10 GMT + Roshni - API Project","image_24":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_bot":true,"is_app_user":false,"updated":1602017279}],"cache_ts":1602126281,"response_metadata":{"next_cursor":""}}' + recorded_at: Thu, 08 Oct 2020 03:04:41 GMT - request: method: get uri: https://slack.com/api/conversations.list?token= @@ -95,13 +95,13 @@ http_interactions: message: OK headers: Date: - - Wed, 07 Oct 2020 03:54:10 GMT + - Thu, 08 Oct 2020 03:04:41 GMT Server: - Apache X-Slack-Req-Id: - - 38213b617492eac4577262aa0d03b1ff + - 6160e2f9b27de60f215a45ff91e65b48 X-Oauth-Scopes: - - users:read,channels:read,chat:write + - users:read,channels:read,chat:write,incoming-webhook Access-Control-Expose-Headers: - x-slack-req-id, retry-after Access-Control-Allow-Origin: @@ -130,19 +130,19 @@ http_interactions: Referrer-Policy: - no-referrer Content-Length: - - '656' + - '719' Content-Type: - application/json; charset=utf-8 X-Via: - - haproxy-www-emc9,haproxy-edge-pdx-1350 + - haproxy-www-tazm,haproxy-edge-pdx-rj19 body: encoding: ASCII-8BIT - string: '{"ok":true,"channels":[{"id":"C01BKP7MWNB","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1601939539,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + string: '{"ok":true,"channels":[{"id":"C01BKP7MWNB","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1601939539,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This channel is for... well, everything else. It\u2019s a place for team jokes, - spur-of-the-moment ideas, and funny GIFs. Go wild!","creator":"U01BKP7MGVD","last_set":1601939539},"previous_names":[],"num_members":2},{"id":"C01BKP8MF2T","name":"ada-c14-slack-cli-project","is_channel":true,"is_group":false,"is_im":false,"created":1601939581,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"ada-c14-slack-cli-project","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + spur-of-the-moment ideas, and funny GIFs. Go wild!","creator":"U01BKP7MGVD","last_set":1601939539},"previous_names":[],"num_members":4},{"id":"C01BKP8MF2T","name":"ada-c14-slack-cli-project","is_channel":true,"is_group":false,"is_im":false,"created":1601939581,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"ada-c14-slack-cli-project","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This *channel* is for working on a project. Hold meetings, share docs, and make - decisions together with your team.","creator":"U01BKP7MGVD","last_set":1601939581},"previous_names":[],"num_members":2},{"id":"C01C0MP03K5","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1601939538,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This + decisions together with your team.","creator":"U01BKP7MGVD","last_set":1601939581},"previous_names":[],"num_members":3},{"id":"C01C0MP03K5","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1601939538,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This is the one channel that will always include everyone. It\u2019s a great spot - for announcements and team-wide conversations.","creator":"U01BKP7MGVD","last_set":1601939538},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' - recorded_at: Wed, 07 Oct 2020 03:54:10 GMT + for announcements and team-wide conversations.","creator":"U01BKP7MGVD","last_set":1601939538},"previous_names":[],"num_members":4},{"id":"C01C6J4TD7D","name":"do-not-add-bots","is_channel":true,"is_group":false,"is_im":false,"created":1602117099,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"do-not-add-bots","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"debugging","creator":"U01BKP7MGVD","last_set":1602117099},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' + recorded_at: Thu, 08 Oct 2020 03:04:41 GMT recorded_with: VCR 6.0.0 diff --git a/test/channel_test.rb b/test/channel_test.rb index f5bf8c94..61af5311 100644 --- a/test/channel_test.rb +++ b/test/channel_test.rb @@ -35,8 +35,7 @@ VCR.use_cassette("list_all") do # Arrange CHANNELS_URL = "https://slack.com/api/conversations.list" - SLACK_TOKEN = ENV["SLACK_TOKEN"] - response = HTTParty.get(CHANNELS_URL, query: {token: SLACK_TOKEN })["channels"] + response = HTTParty.get(CHANNELS_URL, query: {token: Channel.token})["channels"] # Act channels = Channel.list_all diff --git a/test/recipient_test.rb b/test/recipient_test.rb index 8694898f..c80e960e 100644 --- a/test/recipient_test.rb +++ b/test/recipient_test.rb @@ -1,6 +1,6 @@ require_relative 'test_helper' -describe Recipient do +describe "Recipient" do describe 'constructor' do it "creates a Recipient object" do test = Recipient.new(slack_id: "C01BKP7MWNB",name: "random") @@ -12,17 +12,35 @@ describe 'send_message' do before do + # slackbot will be in every slack workspace @test = Recipient.new(slack_id: "USLACKBOT",name: "slackbot") end it 'returns true for successful messages for channels AND users' do - message = "hi" + VCR.use_cassette("send message to recipient") do + message = "maracuyA" + expect(@test.send_message(message)).must_equal true + end end it "rejects messages longer than 4000 characters" do - + VCR.use_cassette("send message to recipient") do + message = "" + 4005.times do + message += "A" + end + expect do + @test.send_message(message) + end.must_raise SlackApiError + end end it "rejects attempts to send messages to invalid users/channels" do - + VCR.use_cassette("send message to recipient") do + false_recipient = Recipient.new(slack_id: "0000000000000000000000", name: "false_user") + message = "testing" + expect do + false_recipient.send_message(message) + end.must_raise SlackApiError + end end end describe 'self.get' do @@ -34,7 +52,7 @@ Recipient.get(url, param) end.must_raise SlackApiError expect do - Recipient.get("https://slack.com/api/monkeys", {token: ENV['SLACK_TOKEN']}) + Recipient.get("https://slack.com/api/monkeys", {token: Recipient.token}) end.must_raise SlackApiError end end @@ -42,7 +60,7 @@ it 'returns a response for url and legal params' do VCR.use_cassette("Recipient.get") do url = "https://slack.com/api/conversations.list" - param = {token: ENV['SLACK_TOKEN']} + param = {token: Recipient.token} response = Recipient.get(url, param) expect(response["ok"]).must_equal true end diff --git a/test/user_test.rb b/test/user_test.rb index 825cea6d..7b38c73b 100644 --- a/test/user_test.rb +++ b/test/user_test.rb @@ -12,8 +12,8 @@ expect(@user.slack_id).must_equal "USLACKBOT" expect(@user.name).must_equal "slackbot" expect(@user.real_name).must_equal "Slackbot" - expect(@user.status_text).must_be_empty - expect(@user.status_emoji).must_be_empty + # expect(@user.status_text).must_be_empty + # expect(@user.status_emoji).must_be_empty end end describe 'details' do @@ -26,8 +26,8 @@ expect(user_details[:SLACK_ID]).must_equal @user.slack_id expect(user_details[:NAME]).must_equal @user.name expect(user_details[:REAL_NAME]).must_equal @user.real_name - expect(user_details[:STATUS_TEXT]).must_equal @user.status_text - expect(user_details[:STATUS_EMOJI]).must_equal @user.status_emoji + # expect(user_details[:STATUS_TEXT]).must_equal @user.status_text + # expect(user_details[:STATUS_EMOJI]).must_equal @user.status_emoji end end describe 'self.list_all' do @@ -35,8 +35,8 @@ VCR.use_cassette("list_all") do # Arrange USERS_URL = "https://slack.com/api/users.list" - SLACK_TOKEN = ENV["SLACK_TOKEN"] - response = HTTParty.get(USERS_URL, query: {token: SLACK_TOKEN })["members"] + # SLACK_TOKEN = ENV["SLACK_TOKEN"] + response = HTTParty.get(USERS_URL, query: {token: User.token})["members"] # Act users = User.list_all @@ -46,9 +46,9 @@ response.length.times do |i| expect(response[i]["id"]).must_equal users[i].slack_id expect(response[i]["name"]).must_equal users[i].name - expect(response[i]["real_name"]).must_equal users[i].real_name - expect(response[i]["status_text"]).must_equal users[i].status_text - expect(response[i]["status_emoji"]).must_equal users[i].status_emoji + expect(response[i]["real_name"] || "").must_equal users[i].real_name + # expect(response[i]["status_text"]).must_equal users[i].status_text + # expect(response[i]["status_emoji"]).must_equal users[i].status_emoji end # NOTE: We didn't write a test to check whether the token is valid because that has already been tested in the diff --git a/test/workspace_test.rb b/test/workspace_test.rb index fc4adecf..e72291de 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -22,8 +22,8 @@ expect(@ws.users[i].slack_id).must_equal user_list[i].slack_id expect(@ws.users[i].name).must_equal user_list[i].name expect(@ws.users[i].real_name).must_equal user_list[i].real_name - expect(@ws.users[i].status_text).must_equal user_list[i].status_text - expect(@ws.users[i].status_emoji).must_equal user_list[i].status_emoji + # expect(@ws.users[i].status_text).must_equal user_list[i].status_text + # expect(@ws.users[i].status_emoji).must_equal user_list[i].status_emoji end channel_list.length.times do |i| expect(@ws.channels[i]).must_be_kind_of Channel @@ -95,8 +95,8 @@ expect(user_detail[:SLACK_ID]).must_equal temp_store[:SLACK_ID] expect(user_detail[:NAME]).must_equal temp_store[:NAME] expect(user_detail[:REAL_NAME]).must_equal temp_store[:REAL_NAME] - expect(user_detail[:STATUS_TEXT]).must_equal temp_store[:STATUS_TEXT] - expect(user_detail[:STATUS_EMOJI]).must_equal temp_store[:STATUS_EMOJI] + # expect(user_detail[:STATUS_TEXT]).must_equal temp_store[:STATUS_TEXT] + # expect(user_detail[:STATUS_EMOJI]).must_equal temp_store[:STATUS_EMOJI] end it "returns nil if no recipient selected" do expect(@ws.show_details).must_be_nil From a53e54a3411001d96df48f0c5719fcb968f97571 Mon Sep 17 00:00:00 2001 From: Pauline Chane Date: Wed, 7 Oct 2020 20:41:35 -0700 Subject: [PATCH 35/55] added working tests for workspace.rb send_message method --- test/cassettes/Workspace_send_message.yml | 68 +++++++++++++++++++++++ test/workspace_test.rb | 14 +++++ 2 files changed, 82 insertions(+) create mode 100644 test/cassettes/Workspace_send_message.yml diff --git a/test/cassettes/Workspace_send_message.yml b/test/cassettes/Workspace_send_message.yml new file mode 100644 index 00000000..dbbcf923 --- /dev/null +++ b/test/cassettes/Workspace_send_message.yml @@ -0,0 +1,68 @@ +--- +http_interactions: +- request: + method: post + uri: https://slack.com/api/chat.postMessage?channel=USLACKBOT&text=HEY%20THERE&token= + body: + encoding: UTF-8 + 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: + Date: + - Thu, 08 Oct 2020 03:38:58 GMT + Server: + - Apache + X-Slack-Req-Id: + - 2823021533868ee560fd4f73aa0c84b5 + X-Oauth-Scopes: + - users:read,channels:read,chat:write,incoming-webhook + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - chat:write + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '340' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-1fyj,haproxy-edge-pdx-sqqp + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channel":"D01CSQTE4QG","ts":"1602128338.000100","message":{"bot_id":"B01C94S0PMJ","type":"message","text":"HEY + THERE","user":"U01BW7XP2KY","ts":"1602128338.000100","team":"T01C6M7N136","bot_profile":{"id":"B01C94S0PMJ","deleted":false,"name":"Fire + - Pauline - Slack CLI","updated":1602014193,"app_id":"A01BZS74GDB","icons":{"image_36":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_36.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/service_72.png"},"team_id":"T01C6M7N136"}}}' + recorded_at: Thu, 08 Oct 2020 03:38:58 GMT +recorded_with: VCR 6.0.0 diff --git a/test/workspace_test.rb b/test/workspace_test.rb index e72291de..5aa885c4 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -102,4 +102,18 @@ expect(@ws.show_details).must_be_nil end end + + describe "send_message" do + it "returns nil if no recipient is selected " do + VCR.use_cassette("Workspace send_message") do + expect(@ws.send_message("hi")).must_be_nil + end + end + it "sends a message when a recipient is selected" do + VCR.use_cassette("Workspace send_message") do + @ws.select_user("slackbot") + expect(@ws.send_message("HEY THERE")).must_equal true + end + end + end end \ No newline at end of file From d2610b5d0a9db1857cc8ea140d1a915ce20d4616 Mon Sep 17 00:00:00 2001 From: roshni-patel Date: Wed, 7 Oct 2020 22:51:09 -0500 Subject: [PATCH 36/55] Updated slack CLI with clear selection method --- lib/slack.rb | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/lib/slack.rb b/lib/slack.rb index ead2f8b4..adfdc31a 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -7,18 +7,18 @@ def main Dotenv.load puts "Welcome to the Ada Slack CLI!" workspace = Workspace.new + selected_recipient = nil puts puts "This workspace has #{workspace.users.length} users and #{workspace.channels.length} channels" puts - puts "Choose from the following \n 1. list channels \n 2. list users \n 3. select user \n 4. select channel \n 5. details \n 6. send message \n 7. quit" + puts "Choose from the following \n 1. list channels \n 2. list users \n 3. select user \n 4. select channel \n 5. details \n 6. send message \n 7. clear selection \n 8. quit \nSelected Recipient(NONE if blank): #{selected_recipient}" puts user_input = "" until user_input == "quit" puts "What would you like to do?" user_input = gets.strip.downcase - selected_recipient = nil case user_input when "list channels" @@ -27,46 +27,46 @@ def main tp workspace.users, :slack_id, :name, :real_name, :status_text, :status_emoji when "select user" puts "Which user would you like to select?" - selected_recipient = gets.chomp + selected_recipient = gets.strip workspace.select_user(selected_recipient) if workspace.selected.nil? puts "No user by the name #{selected_recipient} can be found. Please try again." end when "select channel" puts "Which channel would you like to select?" - selected_recipient = gets.chomp + selected_recipient = gets.strip workspace.select_channel(selected_recipient) if workspace.selected.nil? puts "No channel by the name #{selected_recipient} can be found. Please try again." end when "details" - puts selected_recipient if workspace.selected.nil? puts "Please select a channel or user before asking for details." end workspace.show_details - selected_recipient = nil when "send message" - puts selected_recipient if workspace.selected.nil? puts "Please select a channel or user before sending a message." else puts "What is the message you would like to send?" - message = gets.chomp + message = gets.strip begin workspace.send_message(message) rescue SlackApiError => error puts error.message end - message = nil end + when "clear selection" + workspace.clear_selection + selected_recipient = nil when "quit" user_input = "quit" + break else puts "That's not a valid option. Please try again." end - puts "Choose from the following \n 1. list channels \n 2. list users \n 3. select user \n 4. select channel \n 5. details \n 6. send message \n 7. quit" + puts "Choose from the following \n 1. list channels \n 2. list users \n 3. select user \n 4. select channel \n 5. details \n 6. send message \n 7. clear selection \n 8. quit \nSelected Recipient(NONE if blank): #{selected_recipient}" end puts "Thank you for using the Ada Slack CLI!" From 62803365e7162af6185affe5c31dde472116e90f Mon Sep 17 00:00:00 2001 From: Pauline Chane Date: Thu, 8 Oct 2020 11:40:38 -0700 Subject: [PATCH 37/55] modified send_message in recipient to return parsed response, added tests that have thankfully passed --- lib/recipient.rb | 2 +- test/cassettes/send_message_to_recipient.yml | 157 +++++++++++++++++-- test/recipient_test.rb | 23 ++- 3 files changed, 163 insertions(+), 19 deletions(-) diff --git a/lib/recipient.rb b/lib/recipient.rb index 8fda36c7..a23a3120 100644 --- a/lib/recipient.rb +++ b/lib/recipient.rb @@ -34,7 +34,7 @@ def send_message(message) return false end - return true + return response.parsed_response end def self.token diff --git a/test/cassettes/send_message_to_recipient.yml b/test/cassettes/send_message_to_recipient.yml index 119cd26f..cd83bafc 100644 --- a/test/cassettes/send_message_to_recipient.yml +++ b/test/cassettes/send_message_to_recipient.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: https://slack.com/api/chat.postMessage?channel=0000000000000000000000&text=testing&token= + uri: https://slack.com/api/chat.postMessage?channel=C01BKP7MWNB&text=maracuyA&token= body: encoding: UTF-8 string: '' @@ -19,13 +19,13 @@ http_interactions: message: OK headers: Date: - - Thu, 08 Oct 2020 03:04:55 GMT + - Thu, 08 Oct 2020 18:39:11 GMT Server: - Apache X-Slack-Req-Id: - - 73fa2c5a01558943a4a3d4947202e064 + - f7ef82609d1d3c6bfb8a70913834cfc8 X-Oauth-Scopes: - - users:read,channels:read,chat:write,incoming-webhook + - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read Access-Control-Expose-Headers: - x-slack-req-id, retry-after Access-Control-Allow-Origin: @@ -54,15 +54,16 @@ http_interactions: Referrer-Policy: - no-referrer Content-Length: - - '60' + - '338' Content-Type: - application/json; charset=utf-8 X-Via: - - haproxy-www-w9x0,haproxy-edge-pdx-wg8q + - haproxy-www-eyic,haproxy-edge-pdx-vd1y body: encoding: ASCII-8BIT - string: '{"ok":false,"error":"channel_not_found"}' - recorded_at: Thu, 08 Oct 2020 03:04:55 GMT + string: '{"ok":true,"channel":"C01BKP7MWNB","ts":"1602182352.001500","message":{"bot_id":"B01C94S0PMJ","type":"message","text":"maracuyA","user":"U01BW7XP2KY","ts":"1602182352.001500","team":"T01C6M7N136","bot_profile":{"id":"B01C94S0PMJ","deleted":false,"name":"Fire + - Pauline - Slack CLI","updated":1602014193,"app_id":"A01BZS74GDB","icons":{"image_36":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_36.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/service_72.png"},"team_id":"T01C6M7N136"}}}' + recorded_at: Thu, 08 Oct 2020 18:39:12 GMT - request: method: post uri: https://slack.com/api/chat.postMessage?channel=USLACKBOT&text=maracuyA&token= @@ -82,13 +83,13 @@ http_interactions: message: OK headers: Date: - - Thu, 08 Oct 2020 03:04:57 GMT + - Thu, 08 Oct 2020 18:39:13 GMT Server: - Apache X-Slack-Req-Id: - - d7e171f046a3a148617dd1e10d02abd8 + - 6ce0802185744d80ecf18629b5e29e56 X-Oauth-Scopes: - - users:read,channels:read,chat:write,incoming-webhook + - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read Access-Control-Expose-Headers: - x-slack-req-id, retry-after Access-Control-Allow-Origin: @@ -117,14 +118,140 @@ http_interactions: Referrer-Policy: - no-referrer Content-Length: - - '336' + - '337' Content-Type: - application/json; charset=utf-8 X-Via: - - haproxy-www-a9vn,haproxy-edge-pdx-n5m8 + - haproxy-www-35ul,haproxy-edge-pdx-snuh body: encoding: ASCII-8BIT - string: '{"ok":true,"channel":"D01CSQTE4QG","ts":"1602126297.000100","message":{"bot_id":"B01C94S0PMJ","type":"message","text":"maracuyA","user":"U01BW7XP2KY","ts":"1602126297.000100","team":"T01C6M7N136","bot_profile":{"id":"B01C94S0PMJ","deleted":false,"name":"Fire + string: '{"ok":true,"channel":"D01CSQTE4QG","ts":"1602182353.000100","message":{"bot_id":"B01C94S0PMJ","type":"message","text":"maracuyA","user":"U01BW7XP2KY","ts":"1602182353.000100","team":"T01C6M7N136","bot_profile":{"id":"B01C94S0PMJ","deleted":false,"name":"Fire - Pauline - Slack CLI","updated":1602014193,"app_id":"A01BZS74GDB","icons":{"image_36":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_36.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/service_72.png"},"team_id":"T01C6M7N136"}}}' - recorded_at: Thu, 08 Oct 2020 03:04:57 GMT + recorded_at: Thu, 08 Oct 2020 18:39:13 GMT +- request: + method: get + uri: https://slack.com/api/conversations.members?channel=D01CSQTE4QG&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: + Date: + - Thu, 08 Oct 2020 18:39:14 GMT + Server: + - Apache + X-Slack-Req-Id: + - fc5114efb78bab528ad9eb243c312d35 + X-Oauth-Scopes: + - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '106' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-0lio,haproxy-edge-pdx-1nke + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":["U01BW7XP2KY","USLACKBOT"],"response_metadata":{"next_cursor":""}}' + recorded_at: Thu, 08 Oct 2020 18:39:14 GMT +- request: + method: post + uri: https://slack.com/api/chat.postMessage?channel=0000000000000000000000&text=testing&token= + body: + encoding: UTF-8 + 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: + Date: + - Thu, 08 Oct 2020 18:39:15 GMT + Server: + - Apache + X-Slack-Req-Id: + - 3f2d81bf569200d9ffb7897ad5bebb00 + X-Oauth-Scopes: + - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - chat:write + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '60' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-j9ms,haproxy-edge-pdx-1cbr + body: + encoding: ASCII-8BIT + string: '{"ok":false,"error":"channel_not_found"}' + recorded_at: Thu, 08 Oct 2020 18:39:15 GMT recorded_with: VCR 6.0.0 diff --git a/test/recipient_test.rb b/test/recipient_test.rb index c80e960e..bdc9562e 100644 --- a/test/recipient_test.rb +++ b/test/recipient_test.rb @@ -15,11 +15,28 @@ # slackbot will be in every slack workspace @test = Recipient.new(slack_id: "USLACKBOT",name: "slackbot") end - - it 'returns true for successful messages for channels AND users' do + it 'returns message hash for successful messages for users' do + VCR.use_cassette("send message to recipient") do + message = "maracuyA" + response = @test.send_message(message) + # verify correct channel + url = "https://slack.com/api/conversations.members" + query = {token: Recipient.token, channel: response['channel']} + channel_members = HTTParty.get(url, query: query) + expect(response).must_be_instance_of Hash + expect(response['message']['text']).must_equal message + # for DMs since this is to a DM with Slackbot + expect(channel_members['members']).must_include @test.slack_id + end + end + it 'returns message hash for successful messages for channels' do VCR.use_cassette("send message to recipient") do + channel = Recipient.new(slack_id: "C01BKP7MWNB",name: "random") message = "maracuyA" - expect(@test.send_message(message)).must_equal true + response = channel.send_message(message) + expect(response).must_be_instance_of Hash + # for messages to channels + expect(response['channel']).must_include channel.slack_id end end it "rejects messages longer than 4000 characters" do From 113ac5436f50b9ca6aa5f4188184c1d0a112568a Mon Sep 17 00:00:00 2001 From: Pauline Chane Date: Thu, 8 Oct 2020 13:20:43 -0700 Subject: [PATCH 38/55] created bot class for optional, modified user to have more fields to share in details, completed adjusting user_test, started adjusting workspace_test --- lib/bot.rb | 49 ++++++++++++++ lib/user.rb | 28 ++++---- test/cassettes/Workspace_send_message.yml | 79 ++++++++++++++++++++--- test/user_test.rb | 18 +++--- test/workspace_test.rb | 18 ++++-- 5 files changed, 156 insertions(+), 36 deletions(-) create mode 100644 lib/bot.rb diff --git a/lib/bot.rb b/lib/bot.rb new file mode 100644 index 00000000..4c719b61 --- /dev/null +++ b/lib/bot.rb @@ -0,0 +1,49 @@ +require_relative 'user' +# +class Bot < User + attr_reader :slack_id, :name, :real_name, :send_as, :emoji + def initialize(slack_id: , name:, real_name:, send_as: '', emoji: '') + super(slack_id: slack_id, name: name, real_name: real_name) + @send_as = send_as + @emoji = emoji + end + + def self.current_bot + url = 'https://slack.com/api/auth.test' + query = {token: Bot.token} + sleep(0.5) + response = HTTParty.get(url, query: query) + end + + def self.list_all + + end + + def send_message(message) + # as recommended by Slack API for slack apps + if message.length > 4000 # message too long + # we don't want to break the program unless the API can't connect + # so we do a puts + raise SlackApiError, "Message too long. Try again." + return false + end + url = 'https://slack.com/api/chat.postMessage' + query = { token: Bot.token, + text: message, + channel: @slack_id, + username: @send_as, + icon_emoji: @emoji} # to post to both users and channel + sleep(1) + response = HTTParty.post(url, query: query) + + # check for successful post + unless response.parsed_response['ok'] && response.code == 200 + # we don't want to break the program here because the reason + # could be anything + raise SlackApiError, "Error: #{response.parsed_response['error']}. Please try again" + return false + end + + return response.parsed_response + end +end \ No newline at end of file diff --git a/lib/user.rb b/lib/user.rb index 5285e2e7..31c63abf 100644 --- a/lib/user.rb +++ b/lib/user.rb @@ -3,23 +3,23 @@ class User < Recipient - attr_reader :real_name, :status_text, :status_emoji + attr_reader :real_name, :time_zone, :is_bot - def initialize(slack_id:, name:, real_name:, status_text: '', status_emoji: '') + def initialize(slack_id:, name:, real_name:, time_zone: "Pacific Daylight Time", is_bot: false) super(slack_id: slack_id,name: name) @real_name = real_name || "" - @status_text = status_text - @status_emoji = status_emoji + @time_zone = time_zone + @is_bot = is_bot end # reader methods def details - tp self, :slack_id, :name, :real_name, :status_text, :status_emoji + tp self, :slack_id, :name, :real_name, :time_zone, :is_bot return {"SLACK_ID": @slack_id, "NAME": @name, "REAL_NAME": @real_name, - "STATUS_TEXT": @status_text, - "STATUS_EMOJI": @status_emoji + "TIME_ZONE": @time_zone, + "IS_BOT": @is_bot } end @@ -28,12 +28,14 @@ def self.list_all url = 'https://slack.com/api/users.list' param = {token: User.token} raw_users = User.get(url, param)['members'] - all_users = raw_users.map do |member| - User.new(slack_id: member['id'], - name: member['name'], - real_name: member['real_name'], - status_text: member['status_text'], - status_emoji: member['status_emoji']) + all_users = [] # to skip over deleted users + raw_users.each do |member| + next if member['deleted'] + all_users << User.new(slack_id: member['id'], + name: member['name'], + real_name: member['real_name'], + time_zone: member['tz_label'], + is_bot: member['is_bot']) end return all_users end diff --git a/test/cassettes/Workspace_send_message.yml b/test/cassettes/Workspace_send_message.yml index dbbcf923..0e9ab4d5 100644 --- a/test/cassettes/Workspace_send_message.yml +++ b/test/cassettes/Workspace_send_message.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: https://slack.com/api/chat.postMessage?channel=USLACKBOT&text=HEY%20THERE&token= + uri: https://slack.com/api/chat.postMessage?channel=USLACKBOT&text=HEY%20LISTEN&token= body: encoding: UTF-8 string: '' @@ -19,13 +19,13 @@ http_interactions: message: OK headers: Date: - - Thu, 08 Oct 2020 03:38:58 GMT + - Thu, 08 Oct 2020 19:18:08 GMT Server: - Apache X-Slack-Req-Id: - - 2823021533868ee560fd4f73aa0c84b5 + - f919dc97d5ba09e1ee2c93c458f2093b X-Oauth-Scopes: - - users:read,channels:read,chat:write,incoming-webhook + - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read,chat:write.customize Access-Control-Expose-Headers: - x-slack-req-id, retry-after Access-Control-Allow-Origin: @@ -58,11 +58,74 @@ http_interactions: Content-Type: - application/json; charset=utf-8 X-Via: - - haproxy-www-1fyj,haproxy-edge-pdx-sqqp + - haproxy-www-9rc7,haproxy-edge-pdx-ggfr body: encoding: ASCII-8BIT - string: '{"ok":true,"channel":"D01CSQTE4QG","ts":"1602128338.000100","message":{"bot_id":"B01C94S0PMJ","type":"message","text":"HEY - THERE","user":"U01BW7XP2KY","ts":"1602128338.000100","team":"T01C6M7N136","bot_profile":{"id":"B01C94S0PMJ","deleted":false,"name":"Fire + string: '{"ok":true,"channel":"D01CSQTE4QG","ts":"1602184688.000200","message":{"bot_id":"B01C94S0PMJ","type":"message","text":"HEY + LISTEN","user":"U01BW7XP2KY","ts":"1602184688.000200","team":"T01C6M7N136","bot_profile":{"id":"B01C94S0PMJ","deleted":false,"name":"Fire - Pauline - Slack CLI","updated":1602014193,"app_id":"A01BZS74GDB","icons":{"image_36":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_36.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/service_72.png"},"team_id":"T01C6M7N136"}}}' - recorded_at: Thu, 08 Oct 2020 03:38:58 GMT + recorded_at: Thu, 08 Oct 2020 19:18:08 GMT +- request: + method: get + uri: https://slack.com/api/conversations.members?channel=D01CSQTE4QG&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: + Date: + - Thu, 08 Oct 2020 19:18:09 GMT + Server: + - Apache + X-Slack-Req-Id: + - 07a97f31375d4fc2b27a0961bca1abb5 + X-Oauth-Scopes: + - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read,chat:write.customize + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '106' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-572o,haproxy-edge-pdx-rgh8 + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":["U01BW7XP2KY","USLACKBOT"],"response_metadata":{"next_cursor":""}}' + recorded_at: Thu, 08 Oct 2020 19:18:09 GMT recorded_with: VCR 6.0.0 diff --git a/test/user_test.rb b/test/user_test.rb index 7b38c73b..73b54a3d 100644 --- a/test/user_test.rb +++ b/test/user_test.rb @@ -2,7 +2,7 @@ describe User do before do - @user = User.new(slack_id: "USLACKBOT", name: "slackbot", real_name: "Slackbot") + @user = User.new(slack_id: "USLACKBOT", name: "slackbot", real_name: "Slackbot", is_bot: true) end describe 'constructor' do it "creates an instance of user with appropriate fields" do @@ -12,8 +12,8 @@ expect(@user.slack_id).must_equal "USLACKBOT" expect(@user.name).must_equal "slackbot" expect(@user.real_name).must_equal "Slackbot" - # expect(@user.status_text).must_be_empty - # expect(@user.status_emoji).must_be_empty + expect(@user.time_zone).must_equal "Pacific Daylight Time" + expect(@user.is_bot).must_equal true end end describe 'details' do @@ -26,8 +26,8 @@ expect(user_details[:SLACK_ID]).must_equal @user.slack_id expect(user_details[:NAME]).must_equal @user.name expect(user_details[:REAL_NAME]).must_equal @user.real_name - # expect(user_details[:STATUS_TEXT]).must_equal @user.status_text - # expect(user_details[:STATUS_EMOJI]).must_equal @user.status_emoji + expect(user_details[:TIME_ZONE]).must_equal @user.time_zone + expect(user_details[:IS_BOT]).must_equal @user.is_bot end end describe 'self.list_all' do @@ -37,7 +37,7 @@ USERS_URL = "https://slack.com/api/users.list" # SLACK_TOKEN = ENV["SLACK_TOKEN"] response = HTTParty.get(USERS_URL, query: {token: User.token})["members"] - + response = response.filter{ |member| !member["deleted"]} # remove deleted members # Act users = User.list_all @@ -46,9 +46,9 @@ response.length.times do |i| expect(response[i]["id"]).must_equal users[i].slack_id expect(response[i]["name"]).must_equal users[i].name - expect(response[i]["real_name"] || "").must_equal users[i].real_name - # expect(response[i]["status_text"]).must_equal users[i].status_text - # expect(response[i]["status_emoji"]).must_equal users[i].status_emoji + expect(response[i]["real_name"]).must_equal users[i].real_name + expect(response[i]["tz_label"]).must_equal users[i].time_zone + expect(response[i]["is_bot"]).must_equal users[i].is_bot end # NOTE: We didn't write a test to check whether the token is valid because that has already been tested in the diff --git a/test/workspace_test.rb b/test/workspace_test.rb index 5aa885c4..9dbef995 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -22,8 +22,6 @@ expect(@ws.users[i].slack_id).must_equal user_list[i].slack_id expect(@ws.users[i].name).must_equal user_list[i].name expect(@ws.users[i].real_name).must_equal user_list[i].real_name - # expect(@ws.users[i].status_text).must_equal user_list[i].status_text - # expect(@ws.users[i].status_emoji).must_equal user_list[i].status_emoji end channel_list.length.times do |i| expect(@ws.channels[i]).must_be_kind_of Channel @@ -95,8 +93,6 @@ expect(user_detail[:SLACK_ID]).must_equal temp_store[:SLACK_ID] expect(user_detail[:NAME]).must_equal temp_store[:NAME] expect(user_detail[:REAL_NAME]).must_equal temp_store[:REAL_NAME] - # expect(user_detail[:STATUS_TEXT]).must_equal temp_store[:STATUS_TEXT] - # expect(user_detail[:STATUS_EMOJI]).must_equal temp_store[:STATUS_EMOJI] end it "returns nil if no recipient selected" do expect(@ws.show_details).must_be_nil @@ -111,9 +107,19 @@ end it "sends a message when a recipient is selected" do VCR.use_cassette("Workspace send_message") do + user = @ws.users.find{ |user| user.name == "slackbot" } + # select user to send message to @ws.select_user("slackbot") - expect(@ws.send_message("HEY THERE")).must_equal true + response = @ws.send_message("HEY LISTEN") + # verify correct channel + url = "https://slack.com/api/conversations.members" + query = {token: Recipient.token, channel: response['channel']} + channel_members = HTTParty.get(url, query: query) + expect(response).must_be_instance_of Hash + expect(response['message']['text']).must_equal "HEY LISTEN" + # for DMs since this is to a DM with Slackbot + expect(channel_members['members']).must_include user.slack_id end end end -end \ No newline at end of file +end From 45b9c78c8fca295ed7864878f8316fc918d45f51 Mon Sep 17 00:00:00 2001 From: Pauline Chane Date: Thu, 8 Oct 2020 13:38:06 -0700 Subject: [PATCH 39/55] clean up tests and user after field modifications --- lib/user.rb | 2 +- test/user_test.rb | 4 ++-- test/workspace_test.rb | 6 ++++++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/lib/user.rb b/lib/user.rb index 31c63abf..cf8a3fff 100644 --- a/lib/user.rb +++ b/lib/user.rb @@ -7,7 +7,7 @@ class User < Recipient def initialize(slack_id:, name:, real_name:, time_zone: "Pacific Daylight Time", is_bot: false) super(slack_id: slack_id,name: name) - @real_name = real_name || "" + @real_name = real_name @time_zone = time_zone @is_bot = is_bot end diff --git a/test/user_test.rb b/test/user_test.rb index 73b54a3d..7289d4c3 100644 --- a/test/user_test.rb +++ b/test/user_test.rb @@ -2,7 +2,7 @@ describe User do before do - @user = User.new(slack_id: "USLACKBOT", name: "slackbot", real_name: "Slackbot", is_bot: true) + @user = User.new(slack_id: "USLACKBOT", name: "slackbot", real_name: "Slackbot") end describe 'constructor' do it "creates an instance of user with appropriate fields" do @@ -13,7 +13,7 @@ expect(@user.name).must_equal "slackbot" expect(@user.real_name).must_equal "Slackbot" expect(@user.time_zone).must_equal "Pacific Daylight Time" - expect(@user.is_bot).must_equal true + expect(@user.is_bot).must_equal false end end describe 'details' do diff --git a/test/workspace_test.rb b/test/workspace_test.rb index 9dbef995..45809e5c 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -22,6 +22,9 @@ expect(@ws.users[i].slack_id).must_equal user_list[i].slack_id expect(@ws.users[i].name).must_equal user_list[i].name expect(@ws.users[i].real_name).must_equal user_list[i].real_name + expect(@ws.users[i].time_zone).must_equal user_list[i].time_zone + # NOTE: in the data from Slack API, Slackbot is not considered a bot! + expect(@ws.users[i].is_bot).must_equal user_list[i].is_bot end channel_list.length.times do |i| expect(@ws.channels[i]).must_be_kind_of Channel @@ -93,6 +96,9 @@ expect(user_detail[:SLACK_ID]).must_equal temp_store[:SLACK_ID] expect(user_detail[:NAME]).must_equal temp_store[:NAME] expect(user_detail[:REAL_NAME]).must_equal temp_store[:REAL_NAME] + expect(user_detail[:TIME_ZONE]).must_equal temp_store[:TIME_ZONE] + # NOTE: in the data from Slack API, Slackbot is not considered a bot! + expect(user_detail[:IS_BOT]).must_equal temp_store[:IS_BOT] end it "returns nil if no recipient selected" do expect(@ws.show_details).must_be_nil From 07dba2795898fcf09f4f52c6613c9417bcfe1805 Mon Sep 17 00:00:00 2001 From: roshni-patel Date: Thu, 8 Oct 2020 16:29:04 -0500 Subject: [PATCH 40/55] added save message history and get message history methods, not currently working --- lib/slack.rb | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/lib/slack.rb b/lib/slack.rb index adfdc31a..d1b5119f 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -2,6 +2,21 @@ require_relative 'workspace' require 'table_print' require 'dotenv' +require 'csv' +require 'awesome_print' +def save_message_history(message, recipient) + CSV.open("message_history.csv", "w") do |file| + file << [recipient.name, recipient.slack_id, message] + puts file + end + puts [recipient.name, recipient.slack_id, message] +end + + +def get_message_history(selected) + history = CSV.read('message_history.csv', headers: true).map { |row| row.to_h } + return history.select { |recipient| recipient["RECIPIENT"] == selected.name || recipient["RECIPIENT"] == selected.slack_id} +end def main Dotenv.load @@ -52,6 +67,9 @@ def main message = gets.strip begin workspace.send_message(message) + #ap save_message_history(message, selected_recipient) + ap save_message_history(message, workspace.selected) + ap get_message_history(workspace.selected) rescue SlackApiError => error puts error.message end From 5275735fdc387d2d8ef37fe3a7e7972ea2e68de1 Mon Sep 17 00:00:00 2001 From: Pauline Chane Date: Thu, 8 Oct 2020 14:42:46 -0700 Subject: [PATCH 41/55] completed v0 of bot class for optional --- lib/bot.rb | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/lib/bot.rb b/lib/bot.rb index 4c719b61..96b668a8 100644 --- a/lib/bot.rb +++ b/lib/bot.rb @@ -1,9 +1,13 @@ require_relative 'user' -# +# an excessive but object oriented solution class Bot < User - attr_reader :slack_id, :name, :real_name, :send_as, :emoji - def initialize(slack_id: , name:, real_name:, send_as: '', emoji: '') - super(slack_id: slack_id, name: name, real_name: real_name) + attr_reader :slack_id, :name, :real_name, :time_zone, :is_bot, :send_as, :emoji + def initialize(slack_id: , name:, real_name:, time_zone: ,is_bot: , send_as: '', emoji: '') + super(slack_id: slack_id, + name: name, + real_name: real_name, + time_zone: time_zone, + is_bot: is_bot) @send_as = send_as @emoji = emoji end @@ -15,8 +19,22 @@ def self.current_bot response = HTTParty.get(url, query: query) end - def self.list_all + def set_emoji(emoji) + # regex checks for correct emoji format: + # (:EMOJI:, EMOJI, alphanumeric and dashes only (can also have exactly TWO colons on either side)) + unless /^(:[a-zA-Z0-9-]+:)/ =~ emoji || /^([a-zA-Z0-9-]+)/ + raise ArgumentError, "invalid emoji" + end + @emoji = emoji + end + def set_send_as (username) + @send_as = username + end + + def self.list_all + response = super.list_all + return response.filter{ |user| user.is_bot || user.slack_id == "USLACKBOT"} end def send_message(message) From 6b0c9dbccee07515ad6902c59d5ebe6a3ac98982 Mon Sep 17 00:00:00 2001 From: Pauline Chane Date: Thu, 8 Oct 2020 15:48:59 -0700 Subject: [PATCH 42/55] fixed current_bot method for bot.rb --- lib/bot.rb | 11 ++- lib/workspace.rb | 12 +++- test/cassettes/workspace.yml | 136 +++++++++++++++++++++++++++++++++++ test/workspace_test.rb | 11 ++- 4 files changed, 167 insertions(+), 3 deletions(-) diff --git a/lib/bot.rb b/lib/bot.rb index 96b668a8..ee0b65ba 100644 --- a/lib/bot.rb +++ b/lib/bot.rb @@ -13,10 +13,17 @@ def initialize(slack_id: , name:, real_name:, time_zone: ,is_bot: , send_as: '', end def self.current_bot + users = User.list_all url = 'https://slack.com/api/auth.test' query = {token: Bot.token} sleep(0.5) - response = HTTParty.get(url, query: query) + response = HTTParty.get(url, query: query)['user_id'] + user = users.find{ |user| user.slack_id == response} + return Bot.new(slack_id: user.slack_id, + name: user.name, + real_name: user.real_name, + time_zone: user.time_zone, + is_bot: user.is_bot) end def set_emoji(emoji) @@ -26,10 +33,12 @@ def set_emoji(emoji) raise ArgumentError, "invalid emoji" end @emoji = emoji + return emoji end def set_send_as (username) @send_as = username + return username end def self.list_all diff --git a/lib/workspace.rb b/lib/workspace.rb index 116737bf..0245d1ae 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -3,14 +3,16 @@ require_relative 'user' require_relative 'recipient' require_relative 'channel' +require_relative 'bot' class Workspace - attr_reader :users, :channels, :selected + attr_reader :users, :channels, :selected, :current_bot def initialize @users = User.list_all @channels = Channel.list_all @selected = nil + @current_bot = Bot.current_bot end def select_channel(channel_info) @@ -60,4 +62,12 @@ def show_details # returns respective details for selected user or channel otherwise return @selected.nil? ? nil : @selected.details end + + def set_bot_emoji(emoji) + return @current_bot.set_emoji + end + + def set_bot_alias(send_as) + return @current_bot.set_send_as + end end diff --git a/test/cassettes/workspace.yml b/test/cassettes/workspace.yml index c38b1677..6be2c429 100644 --- a/test/cassettes/workspace.yml +++ b/test/cassettes/workspace.yml @@ -145,4 +145,140 @@ http_interactions: is the one channel that will always include everyone. It\u2019s a great spot for announcements and team-wide conversations.","creator":"U01BKP7MGVD","last_set":1601939538},"previous_names":[],"num_members":4},{"id":"C01C6J4TD7D","name":"do-not-add-bots","is_channel":true,"is_group":false,"is_im":false,"created":1602117099,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"do-not-add-bots","is_shared":false,"parent_conversation":null,"creator":"U01BKP7MGVD","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["T01C6M7N136"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":false,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"debugging","creator":"U01BKP7MGVD","last_set":1602117099},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' recorded_at: Thu, 08 Oct 2020 03:04:41 GMT +- request: + method: get + uri: https://slack.com/api/auth.test?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: + Date: + - Thu, 08 Oct 2020 22:26:00 GMT + Server: + - Apache + X-Slack-Req-Id: + - b405f79228d2d5315b96906e64ff1cc8 + X-Oauth-Scopes: + - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read,chat:write.customize + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Content-Length: + - '160' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-p65w,haproxy-edge-pdx-locq + body: + encoding: ASCII-8BIT + string: '{"ok":true,"url":"https:\/\/slackclitest.slack.com\/","team":"SlackCLITest","user":"fire_pauline_slack_cl","team_id":"T01C6M7N136","user_id":"U01BW7XP2KY","bot_id":"B01C94S0PMJ"}' + recorded_at: Thu, 08 Oct 2020 22:26:00 GMT +- 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: + Date: + - Thu, 08 Oct 2020 22:38:49 GMT + Server: + - Apache + X-Slack-Req-Id: + - b8b2d59f162f99abb1d7f965c9b9fd22 + X-Oauth-Scopes: + - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read,chat:write.customize + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - users:read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '1416' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-49bf,haproxy-edge-pdx-bm9l + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"T01C6M7N136","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":"America\/Los_Angeles","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":"T01C6M7N136"},"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":"U01BKP7MGVD","team_id":"T01C6M7N136","name":"pauline.chane","deleted":false,"color":"9f69e7","real_name":"pauline.chane","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"pauline.chane","real_name_normalized":"pauline.chane","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gac6154e1c22","image_24":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png","status_text_canonical":"","team":"T01C6M7N136"},"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":1602140346},{"id":"U01BW7XP2KY","team_id":"T01C6M7N136","name":"fire_pauline_slack_cl","deleted":false,"color":"e7392d","real_name":"Fire + - Pauline - Slack CLI","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight + Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Fire + - Pauline - Slack CLI","real_name_normalized":"Fire - Pauline - Slack CLI","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gd69838ab849","api_app_id":"A01BZS74GDB","always_active":false,"bot_id":"B01C94S0PMJ","image_24":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1602014193},{"id":"U01BXCZPJBF","team_id":"T01C6M7N136","name":"rpatel01","deleted":false,"color":"4bbe2e","real_name":"Roshni + Patel","tz":"America\/Chicago","tz_label":"Central Daylight Time","tz_offset":-18000,"profile":{"title":"","phone":"","skype":"","real_name":"Roshni + Patel","real_name_normalized":"Roshni Patel","display_name":"roshni.patel","display_name_normalized":"roshni.patel","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g06d8eb9fe76","first_name":"Roshni","last_name":"Patel","image_24":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_admin":true,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1602115573},{"id":"U01C33TL48J","team_id":"T01C6M7N136","name":"fire_roshni_api_pro2","deleted":false,"color":"674b1b","real_name":"Fire + - Roshni - API Project","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight + Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Fire + - Roshni - API Project","real_name_normalized":"Fire - Roshni - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g4bff6015394","api_app_id":"A01C98GFT5J","always_active":false,"bot_id":"B01BWBQTUEA","image_24":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1602017351},{"id":"U01CFJST9SM","team_id":"T01C6M7N136","name":"fire_roshni_api_proje","deleted":true,"profile":{"title":"","phone":"","skype":"","real_name":"Fire + - Roshni - API Project","real_name_normalized":"Fire - Roshni - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g0a5c0c0a39c","api_app_id":"A01CSQSKQE4","always_active":false,"bot_id":"B01CSR2C56U","first_name":"Fire","last_name":"- + Roshni - API Project","image_24":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_bot":true,"is_app_user":false,"updated":1602017279}],"cache_ts":1602196729,"response_metadata":{"next_cursor":""}}' + recorded_at: Thu, 08 Oct 2020 22:38:49 GMT recorded_with: VCR 6.0.0 diff --git a/test/workspace_test.rb b/test/workspace_test.rb index 45809e5c..5cc9df3a 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -12,7 +12,7 @@ VCR.use_cassette("workspace") do user_list = User.list_all channel_list = Channel.list_all - + current_bot = Bot.current_bot # Assert expect(@ws).must_be_instance_of Workspace expect(@ws.users).must_be_instance_of Array @@ -33,6 +33,15 @@ expect(@ws.channels[i].topic).must_equal channel_list[i].topic expect(@ws.channels[i].member_count).must_equal channel_list[i].member_count end + + expect(@ws.current_bot).must_be_kind_of Bot + expect(@ws.current_bot.slack_id).must_equal current_bot.slack_id + expect(@ws.current_bot.name).must_equal current_bot.name + expect(@ws.current_bot.real_name).must_equal current_bot.real_name + expect(@ws.current_bot.time_zone).must_equal current_bot.time_zone + expect(@ws.current_bot.is_bot).must_equal current_bot.is_bot + expect(@ws.current_bot.send_as).must_equal current_bot.send_as + expect(@ws.current_bot.emoji).must_equal current_bot.emoji end end end From 74d7cb90ed64f707d7fe16af40a5b01f21b12060 Mon Sep 17 00:00:00 2001 From: Pauline Chane Date: Thu, 8 Oct 2020 15:53:15 -0700 Subject: [PATCH 43/55] removed redundant methods in workspace that can be directly called onto current_bot field --- lib/workspace.rb | 7 ------- 1 file changed, 7 deletions(-) diff --git a/lib/workspace.rb b/lib/workspace.rb index 0245d1ae..2b96ba0a 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -63,11 +63,4 @@ def show_details return @selected.nil? ? nil : @selected.details end - def set_bot_emoji(emoji) - return @current_bot.set_emoji - end - - def set_bot_alias(send_as) - return @current_bot.set_send_as - end end From 564a4d12574e1ff6d4cc28eeed76a28ba2ac036f Mon Sep 17 00:00:00 2001 From: roshni-patel Date: Thu, 8 Oct 2020 18:07:41 -0500 Subject: [PATCH 44/55] Started writing bot tests --- test/bot_test.rb | 66 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 test/bot_test.rb diff --git a/test/bot_test.rb b/test/bot_test.rb new file mode 100644 index 00000000..d6faf3e4 --- /dev/null +++ b/test/bot_test.rb @@ -0,0 +1,66 @@ +require_relative 'test_helper' +require_relative 'user' + +describe Bot do + before do + @bot = Bot.new(slack_id: "USLACKBOT", name: "slackbot", real_name: "Slackbot", time_zone: "Pacific Daylight Time", is_bot: true, send_as: "Bork", emoji: "dog") + end + + describe "constructor" do + it "creates an instance of bot with appropriate fields" do + expect(@bot).must_be_instance_of Bot + expect(@bot).must_be_kind_of User + expect(@bot.slack_id).must_equal "USLACKBOT" + expect(@bot.name).must_equal "slackbot" + expect(@bot.real_name).must_equal "Slackbot" + expect(@bot.time_zone).must_equal "Pacific Daylight Time" + expect(@bot.is_bot).must_equal true + expect(@bot.send_as).must_equal "Bork" + expect(@bot.emoji).must_equal "dog" + end + + describe 'set_send_as' do + it "sends a message as the user provided" do + expect(@bot.set_send_as("Bork")).must_equal "Bork" + end + end + + describe 'set_emoji' do + it "sets the emoji based on the provided emoji" do + expect(@bot.set_emoji("dog")).must_equal "Bork" + end + it "raises an error when the emoji is invalid format" do + expect do + @bot.set_emoji("??????") + end.must_raise ArgumentError + end + end + + describe 'self.list_all' do + it "returns all users in the workspace" do + VCR.use_cassette("list_all") do + # Arrange + BOTS_URL = "https://slack.com/api/users.list" + # SLACK_TOKEN = ENV["SLACK_TOKEN"] + response = HTTParty.get(BOTS_URL, query: {token: Bot.token})["members"] + response = response.filter{ |member| !member["deleted"]} # remove deleted members + # Act + bots = Bot.list_all + + # Assert + expect(Bot.list_all.length).must_equal response.length + response.length.times do |i| + expect(response[i]["id"]).must_equal bots[i].slack_id + expect(response[i]["name"]).must_equal bots[i].name + expect(response[i]["real_name"]).must_equal bots[i].real_name + expect(response[i]["tz_label"]).must_equal bots[i].time_zone + expect(response[i]["is_bot"]).must_equal bots[i].is_bot + expect(response[i]["send_as"]).must_equal bots[i].send_as + expect(response[i]["emoji"]).must_equal bots[i].emoji + end + end + end + end + end +end + From e38f46c35c9ba73faee9f0901fab07492f66294c Mon Sep 17 00:00:00 2001 From: Pauline Chane Date: Thu, 8 Oct 2020 19:03:35 -0700 Subject: [PATCH 45/55] fixed some bot functions, one test is not working still --- lib/bot.rb | 7 +- test/bot_test.rb | 73 ++++++++------- test/cassettes/bot_list_all.yml | 153 ++++++++++++++++++++++++++++++++ test/test_helper.rb | 1 + 4 files changed, 191 insertions(+), 43 deletions(-) create mode 100644 test/cassettes/bot_list_all.yml diff --git a/lib/bot.rb b/lib/bot.rb index ee0b65ba..bc9b5c73 100644 --- a/lib/bot.rb +++ b/lib/bot.rb @@ -29,9 +29,7 @@ def self.current_bot def set_emoji(emoji) # regex checks for correct emoji format: # (:EMOJI:, EMOJI, alphanumeric and dashes only (can also have exactly TWO colons on either side)) - unless /^(:[a-zA-Z0-9-]+:)/ =~ emoji || /^([a-zA-Z0-9-]+)/ - raise ArgumentError, "invalid emoji" - end + raise ArgumentError, "invalid emoji" unless /^(:[a-zA-Z0-9-]+:)/ =~ emoji || /^([a-zA-Z0-9-]+)/ =~ emoji @emoji = emoji return emoji end @@ -42,8 +40,7 @@ def set_send_as (username) end def self.list_all - response = super.list_all - return response.filter{ |user| user.is_bot || user.slack_id == "USLACKBOT"} + super.list_all.filter{ |user| user.is_bot || user.slack_id == "USLACKBOT"} end def send_message(message) diff --git a/test/bot_test.rb b/test/bot_test.rb index d6faf3e4..4d0e1cf2 100644 --- a/test/bot_test.rb +++ b/test/bot_test.rb @@ -1,5 +1,4 @@ require_relative 'test_helper' -require_relative 'user' describe Bot do before do @@ -18,49 +17,47 @@ expect(@bot.send_as).must_equal "Bork" expect(@bot.emoji).must_equal "dog" end - - describe 'set_send_as' do - it "sends a message as the user provided" do - expect(@bot.set_send_as("Bork")).must_equal "Bork" - end + end + describe 'set_send_as' do + it "sends a message as the user provided" do + expect(@bot.set_send_as("Bork")).must_equal "Bork" end - - describe 'set_emoji' do - it "sets the emoji based on the provided emoji" do - expect(@bot.set_emoji("dog")).must_equal "Bork" - end - it "raises an error when the emoji is invalid format" do - expect do - @bot.set_emoji("??????") - end.must_raise ArgumentError - end + end + describe 'set_emoji' do + it "sets the emoji based on the provided emoji" do + expect(@bot.set_emoji("dog")).must_equal "dog" end + it "raises an error when the emoji is invalid format" do + expect do + @bot.set_emoji("??????") + end.must_raise ArgumentError + end + end + describe "self.list_all" do + it "returns all users in the workspace" do + VCR.use_cassette("bot list_all") do + # Arrange + BOTS_URL = "https://slack.com/api/users.list" + # SLACK_TOKEN = ENV["SLACK_TOKEN"] + response = HTTParty.get(BOTS_URL, query: {token: Bot.token})["members"] + response = response.filter{ |member| !member["deleted"]} # remove deleted members + # Act + Bot.list_all - describe 'self.list_all' do - it "returns all users in the workspace" do - VCR.use_cassette("list_all") do - # Arrange - BOTS_URL = "https://slack.com/api/users.list" - # SLACK_TOKEN = ENV["SLACK_TOKEN"] - response = HTTParty.get(BOTS_URL, query: {token: Bot.token})["members"] - response = response.filter{ |member| !member["deleted"]} # remove deleted members - # Act - bots = Bot.list_all - - # Assert - expect(Bot.list_all.length).must_equal response.length - response.length.times do |i| - expect(response[i]["id"]).must_equal bots[i].slack_id - expect(response[i]["name"]).must_equal bots[i].name - expect(response[i]["real_name"]).must_equal bots[i].real_name - expect(response[i]["tz_label"]).must_equal bots[i].time_zone - expect(response[i]["is_bot"]).must_equal bots[i].is_bot - expect(response[i]["send_as"]).must_equal bots[i].send_as - expect(response[i]["emoji"]).must_equal bots[i].emoji - end + # Assert + expect(bots.length).must_equal response.length + response.length.times do |i| + expect(response[i]["id"]).must_equal bots[i].slack_id + expect(response[i]["name"]).must_equal bots[i].name + expect(response[i]["real_name"]).must_equal bots[i].real_name + expect(response[i]["tz_label"]).must_equal bots[i].time_zone + expect(response[i]["is_bot"]).must_equal bots[i].is_bot + expect(response[i]["send_as"]).must_equal bots[i].send_as + expect(response[i]["emoji"]).must_equal bots[i].emoji end end end + end end diff --git a/test/cassettes/bot_list_all.yml b/test/cassettes/bot_list_all.yml new file mode 100644 index 00000000..5ee09908 --- /dev/null +++ b/test/cassettes/bot_list_all.yml @@ -0,0 +1,153 @@ +--- +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: + Date: + - Fri, 09 Oct 2020 01:33:49 GMT + Server: + - Apache + X-Slack-Req-Id: + - a5399da840de89f8388ec9872bf61f83 + X-Oauth-Scopes: + - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read,chat:write.customize + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - users:read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '1416' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-77pk,haproxy-edge-pdx-ggfr + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"T01C6M7N136","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":"America\/Los_Angeles","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":"T01C6M7N136"},"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":"U01BKP7MGVD","team_id":"T01C6M7N136","name":"pauline.chane","deleted":false,"color":"9f69e7","real_name":"pauline.chane","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"pauline.chane","real_name_normalized":"pauline.chane","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gac6154e1c22","image_24":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png","status_text_canonical":"","team":"T01C6M7N136"},"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":1602140346},{"id":"U01BW7XP2KY","team_id":"T01C6M7N136","name":"fire_pauline_slack_cl","deleted":false,"color":"e7392d","real_name":"Fire + - Pauline - Slack CLI","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight + Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Fire + - Pauline - Slack CLI","real_name_normalized":"Fire - Pauline - Slack CLI","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gd69838ab849","api_app_id":"A01BZS74GDB","always_active":false,"bot_id":"B01C94S0PMJ","image_24":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1602014193},{"id":"U01BXCZPJBF","team_id":"T01C6M7N136","name":"rpatel01","deleted":false,"color":"4bbe2e","real_name":"Roshni + Patel","tz":"America\/Chicago","tz_label":"Central Daylight Time","tz_offset":-18000,"profile":{"title":"","phone":"","skype":"","real_name":"Roshni + Patel","real_name_normalized":"Roshni Patel","display_name":"roshni.patel","display_name_normalized":"roshni.patel","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g06d8eb9fe76","first_name":"Roshni","last_name":"Patel","image_24":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_admin":true,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1602115573},{"id":"U01C33TL48J","team_id":"T01C6M7N136","name":"fire_roshni_api_pro2","deleted":false,"color":"674b1b","real_name":"Fire + - Roshni - API Project","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight + Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Fire + - Roshni - API Project","real_name_normalized":"Fire - Roshni - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g4bff6015394","api_app_id":"A01C98GFT5J","always_active":false,"bot_id":"B01BWBQTUEA","image_24":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1602017351},{"id":"U01CFJST9SM","team_id":"T01C6M7N136","name":"fire_roshni_api_proje","deleted":true,"profile":{"title":"","phone":"","skype":"","real_name":"Fire + - Roshni - API Project","real_name_normalized":"Fire - Roshni - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g0a5c0c0a39c","api_app_id":"A01CSQSKQE4","always_active":false,"bot_id":"B01CSR2C56U","first_name":"Fire","last_name":"- + Roshni - API Project","image_24":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_bot":true,"is_app_user":false,"updated":1602017279}],"cache_ts":1602207229,"response_metadata":{"next_cursor":""}}' + recorded_at: Fri, 09 Oct 2020 01:33:49 GMT +- 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: + Date: + - Fri, 09 Oct 2020 01:33:50 GMT + Server: + - Apache + X-Slack-Req-Id: + - 5d5d81f19e8571ca0da5118e6907bbd5 + X-Oauth-Scopes: + - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read,chat:write.customize + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - users:read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '1416' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-jtpc,haproxy-edge-pdx-vs95 + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"T01C6M7N136","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":"America\/Los_Angeles","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":"T01C6M7N136"},"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":"U01BKP7MGVD","team_id":"T01C6M7N136","name":"pauline.chane","deleted":false,"color":"9f69e7","real_name":"pauline.chane","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"pauline.chane","real_name_normalized":"pauline.chane","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gac6154e1c22","image_24":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/ac6154e1c224ad644230148686eca456.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png","status_text_canonical":"","team":"T01C6M7N136"},"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":1602140346},{"id":"U01BW7XP2KY","team_id":"T01C6M7N136","name":"fire_pauline_slack_cl","deleted":false,"color":"e7392d","real_name":"Fire + - Pauline - Slack CLI","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight + Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Fire + - Pauline - Slack CLI","real_name_normalized":"Fire - Pauline - Slack CLI","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gd69838ab849","api_app_id":"A01BZS74GDB","always_active":false,"bot_id":"B01C94S0PMJ","image_24":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/d69838ab849b8f71f498ba5e91db6ffc.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1602014193},{"id":"U01BXCZPJBF","team_id":"T01C6M7N136","name":"rpatel01","deleted":false,"color":"4bbe2e","real_name":"Roshni + Patel","tz":"America\/Chicago","tz_label":"Central Daylight Time","tz_offset":-18000,"profile":{"title":"","phone":"","skype":"","real_name":"Roshni + Patel","real_name_normalized":"Roshni Patel","display_name":"roshni.patel","display_name_normalized":"roshni.patel","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g06d8eb9fe76","first_name":"Roshni","last_name":"Patel","image_24":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/06d8eb9fe76adc7430610fc5619b7dae.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_admin":true,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1602115573},{"id":"U01C33TL48J","team_id":"T01C6M7N136","name":"fire_roshni_api_pro2","deleted":false,"color":"674b1b","real_name":"Fire + - Roshni - API Project","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight + Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Fire + - Roshni - API Project","real_name_normalized":"Fire - Roshni - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g4bff6015394","api_app_id":"A01C98GFT5J","always_active":false,"bot_id":"B01BWBQTUEA","image_24":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/4bff60153947fde20f503d4cf95c2095.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":true,"is_app_user":false,"updated":1602017351},{"id":"U01CFJST9SM","team_id":"T01C6M7N136","name":"fire_roshni_api_proje","deleted":true,"profile":{"title":"","phone":"","skype":"","real_name":"Fire + - Roshni - API Project","real_name_normalized":"Fire - Roshni - API Project","display_name":"","display_name_normalized":"","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g0a5c0c0a39c","api_app_id":"A01CSQSKQE4","always_active":false,"bot_id":"B01CSR2C56U","first_name":"Fire","last_name":"- + Roshni - API Project","image_24":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/0a5c0c0a39ccd085e6f8b6f864f95dce.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-512.png","status_text_canonical":"","team":"T01C6M7N136"},"is_bot":true,"is_app_user":false,"updated":1602017279}],"cache_ts":1602207230,"response_metadata":{"next_cursor":""}}' + recorded_at: Fri, 09 Oct 2020 01:33:50 GMT +recorded_with: VCR 6.0.0 diff --git a/test/test_helper.rb b/test/test_helper.rb index 106321c7..6d276751 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -17,6 +17,7 @@ require_relative '../lib/channel' require_relative '../lib/user' require_relative '../lib/workspace' +require_relative '../lib/bot' require_relative '../lib/slack_api_error' From 69a6be48080ce370d33d22ffd820e28b888b9618 Mon Sep 17 00:00:00 2001 From: roshni-patel Date: Thu, 8 Oct 2020 21:41:35 -0500 Subject: [PATCH 46/55] mostly working CLI, will need to change a few things --- lib/slack.rb | 50 ++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 38 insertions(+), 12 deletions(-) diff --git a/lib/slack.rb b/lib/slack.rb index d1b5119f..883d604c 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -4,30 +4,33 @@ require 'dotenv' require 'csv' require 'awesome_print' + def save_message_history(message, recipient) - CSV.open("message_history.csv", "w") do |file| + CSV.open("message_history.csv", "a") do |file| file << [recipient.name, recipient.slack_id, message] - puts file end - puts [recipient.name, recipient.slack_id, message] end - def get_message_history(selected) - history = CSV.read('message_history.csv', headers: true).map { |row| row.to_h } - return history.select { |recipient| recipient["RECIPIENT"] == selected.name || recipient["RECIPIENT"] == selected.slack_id} + history = CSV.read('message_history.csv').map { |row| row.to_a } + selected_recipients = history.select { |recipient| recipient[0] == selected.name || recipient[1] == selected.slack_id} + messages = selected_recipients.map{ |recipient_arr| recipient_arr[2]} + return messages end def main Dotenv.load puts "Welcome to the Ada Slack CLI!" workspace = Workspace.new + bot = workspace.current_bot selected_recipient = nil + selected_emoji = nil + selected_username = nil puts puts "This workspace has #{workspace.users.length} users and #{workspace.channels.length} channels" puts - puts "Choose from the following \n 1. list channels \n 2. list users \n 3. select user \n 4. select channel \n 5. details \n 6. send message \n 7. clear selection \n 8. quit \nSelected Recipient(NONE if blank): #{selected_recipient}" + puts "Choose from the following \n 1. list channels \n 2. list users \n 3. select user \n 4. select channel \n 5. details \n 6. send message \n 7. clear selection \n 8. message history \n 9. set emoji \n 10. set username \n 11. quit \nSelected Recipient(NONE if blank): #{selected_recipient} \nSelected Emoji(NONE if blank and only for current bot): #{selected_recipient} \nSelected Username(NONE if blank and only for current bot): #{selected_username}" puts user_input = "" @@ -39,7 +42,7 @@ def main when "list channels" tp workspace.channels, :slack_id, :name, :topic, :member_count when "list users" - tp workspace.users, :slack_id, :name, :real_name, :status_text, :status_emoji + tp workspace.users, :slack_id, :name, :real_name, :time_zone, :is_bot when "select user" puts "Which user would you like to select?" selected_recipient = gets.strip @@ -67,9 +70,7 @@ def main message = gets.strip begin workspace.send_message(message) - #ap save_message_history(message, selected_recipient) - ap save_message_history(message, workspace.selected) - ap get_message_history(workspace.selected) + save_message_history(message, workspace.selected) rescue SlackApiError => error puts error.message end @@ -80,11 +81,36 @@ def main when "quit" user_input = "quit" break + when "message history" + message_history = get_message_history(workspace.selected) + ap message_history + when "set emoji" + if workspace.current_bot.slack_id == workspace.selected.slack_id + puts "Which emoji would you like to add?" + emoji = gets.strip + selected_emoji = emoji + begin + bot.set_emoji(emoji) + rescue ArgumentError => error + puts error.message + end + else + puts "You can only set the emoji for the current bot." + end + when "set user" + if workspace.current_bot.name == workspace.selected.name + puts "What would you like to set the username of the bot as?" + username = gets.strip + selected_username = username + bot.set_send_as(username) + else + puts "You can only set the username for the current bot." + end else puts "That's not a valid option. Please try again." end - puts "Choose from the following \n 1. list channels \n 2. list users \n 3. select user \n 4. select channel \n 5. details \n 6. send message \n 7. clear selection \n 8. quit \nSelected Recipient(NONE if blank): #{selected_recipient}" + puts "Choose from the following: \n 1. list channels \n 2. list users \n 3. select user \n 4. select channel \n 5. details \n 6. send message \n 7. clear selection \n 8. message history \n 9. set emoji \n 10. set username \n 11. quit \nSelected Recipient(NONE if blank): #{selected_recipient} \nSelected Emoji(NONE if blank and only for current bot): #{selected_emoji} \nSelected Username(NONE if blank and only for current bot): #{selected_username}" end puts "Thank you for using the Ada Slack CLI!" From a7528ad227547e78d681188cb606c2ab81cc8166 Mon Sep 17 00:00:00 2001 From: Pauline Chane Date: Thu, 8 Oct 2020 19:51:54 -0700 Subject: [PATCH 47/55] minor fixes to worksapce set_user and bot tests --- lib/bot.rb | 6 ++++-- lib/workspace.rb | 3 +++ test/bot_test.rb | 12 +++++++----- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/lib/bot.rb b/lib/bot.rb index bc9b5c73..cd3ae72b 100644 --- a/lib/bot.rb +++ b/lib/bot.rb @@ -29,7 +29,7 @@ def self.current_bot def set_emoji(emoji) # regex checks for correct emoji format: # (:EMOJI:, EMOJI, alphanumeric and dashes only (can also have exactly TWO colons on either side)) - raise ArgumentError, "invalid emoji" unless /^(:[a-zA-Z0-9-]+:)/ =~ emoji || /^([a-zA-Z0-9-]+)/ =~ emoji + raise ArgumentError, "invalid emoji" unless /^(:\w+:)/ =~ emoji || /^(\w+)/ =~ emoji @emoji = emoji return emoji end @@ -40,7 +40,9 @@ def set_send_as (username) end def self.list_all - super.list_all.filter{ |user| user.is_bot || user.slack_id == "USLACKBOT"} + bots = super + bots = bots.filter{ |user| user.is_bot || user.slack_id == "USLACKBOT"} + return bots end def send_message(message) diff --git a/lib/workspace.rb b/lib/workspace.rb index 2b96ba0a..615bd6e8 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -37,6 +37,9 @@ def select_user(user_info) if user.slack_id == user_s || user.name == user_s @selected = user return user_info + elsif user.slack_id == @current_bot.slack_id + @selected = @current_bot + return user_info end end end diff --git a/test/bot_test.rb b/test/bot_test.rb index 4d0e1cf2..352850fb 100644 --- a/test/bot_test.rb +++ b/test/bot_test.rb @@ -19,7 +19,7 @@ end end describe 'set_send_as' do - it "sends a message as the user provided" do + it "sets name to user provided alias" do expect(@bot.set_send_as("Bork")).must_equal "Bork" end end @@ -40,9 +40,10 @@ BOTS_URL = "https://slack.com/api/users.list" # SLACK_TOKEN = ENV["SLACK_TOKEN"] response = HTTParty.get(BOTS_URL, query: {token: Bot.token})["members"] - response = response.filter{ |member| !member["deleted"]} # remove deleted members + # account for slackbot and deleted members + response = response.filter{ |member| (!member["deleted"] && member["is_bot"])|| member["id"] == "USLACKBOT"} # remove deleted members # Act - Bot.list_all + bots = Bot.list_all # Assert expect(bots.length).must_equal response.length @@ -52,11 +53,12 @@ expect(response[i]["real_name"]).must_equal bots[i].real_name expect(response[i]["tz_label"]).must_equal bots[i].time_zone expect(response[i]["is_bot"]).must_equal bots[i].is_bot - expect(response[i]["send_as"]).must_equal bots[i].send_as - expect(response[i]["emoji"]).must_equal bots[i].emoji end end end + end + + describe "send_message" do end end From 5d639de323812854b2b514d45fe5272aa208d0c5 Mon Sep 17 00:00:00 2001 From: Pauline Chane Date: Thu, 8 Oct 2020 20:15:07 -0700 Subject: [PATCH 48/55] fixed select_user method to account for current bot to send with customized message --- lib/workspace.rb | 3 ++- test/workspace_test.rb | 7 ++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/workspace.rb b/lib/workspace.rb index 615bd6e8..bdbf1dc2 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -37,7 +37,8 @@ def select_user(user_info) if user.slack_id == user_s || user.name == user_s @selected = user return user_info - elsif user.slack_id == @current_bot.slack_id + end + if @current_bot.slack_id == user_s || @current_bot.name == user_s @selected = @current_bot return user_info end diff --git a/test/workspace_test.rb b/test/workspace_test.rb index 5cc9df3a..5746300a 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -50,7 +50,6 @@ it "returns user input for successful match" do slackbot = @ws.users.find{|user| user.slack_id == "USLACKBOT"} - @ws.select_user("slackbot") # by name expect(@ws.selected).must_equal slackbot @@ -64,6 +63,12 @@ # slack usernames have a 21 character limit expect(@ws.select_user("SlackSlackSlackSlackSlack")).must_be_nil end + + it "selects current_bot as Bot object if current bot is selected" do + @ws.select_user(@ws.current_bot.name) + expect(@ws.selected).must_be_instance_of Bot + expect(@ws.selected).must_equal @ws.current_bot + end end describe "select_channel" do From 1584681b81f5d91634a7beccd1ae805e0a7eeef8 Mon Sep 17 00:00:00 2001 From: roshni-patel Date: Thu, 8 Oct 2020 22:21:50 -0500 Subject: [PATCH 49/55] updated cli to combine emoji and username --- lib/slack.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/slack.rb b/lib/slack.rb index 883d604c..8ae1d9a5 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -30,7 +30,7 @@ def main puts puts "This workspace has #{workspace.users.length} users and #{workspace.channels.length} channels" puts - puts "Choose from the following \n 1. list channels \n 2. list users \n 3. select user \n 4. select channel \n 5. details \n 6. send message \n 7. clear selection \n 8. message history \n 9. set emoji \n 10. set username \n 11. quit \nSelected Recipient(NONE if blank): #{selected_recipient} \nSelected Emoji(NONE if blank and only for current bot): #{selected_recipient} \nSelected Username(NONE if blank and only for current bot): #{selected_username}" + puts "Choose from the following \n 1. list channels \n 2. list users \n 3. select user \n 4. select channel \n 5. details \n 6. send message \n 7. clear selection \n 8. message history \n 9. set emoji and username \n 10. quit \nSelected Recipient(NONE if blank): #{selected_recipient} \nSelected Emoji(NONE if blank and only for current bot): #{selected_recipient} \nSelected Username(NONE if blank and only for current bot): #{selected_username}" puts user_input = "" @@ -84,7 +84,7 @@ def main when "message history" message_history = get_message_history(workspace.selected) ap message_history - when "set emoji" + when "set emoji and username" if workspace.current_bot.slack_id == workspace.selected.slack_id puts "Which emoji would you like to add?" emoji = gets.strip @@ -97,7 +97,7 @@ def main else puts "You can only set the emoji for the current bot." end - when "set user" + if workspace.current_bot.name == workspace.selected.name puts "What would you like to set the username of the bot as?" username = gets.strip @@ -110,7 +110,7 @@ def main puts "That's not a valid option. Please try again." end - puts "Choose from the following: \n 1. list channels \n 2. list users \n 3. select user \n 4. select channel \n 5. details \n 6. send message \n 7. clear selection \n 8. message history \n 9. set emoji \n 10. set username \n 11. quit \nSelected Recipient(NONE if blank): #{selected_recipient} \nSelected Emoji(NONE if blank and only for current bot): #{selected_emoji} \nSelected Username(NONE if blank and only for current bot): #{selected_username}" + puts "Choose from the following: \n 1. list channels \n 2. list users \n 3. select user \n 4. select channel \n 5. details \n 6. send message \n 7. clear selection \n 8. message history \n 9. set emoji and username \n 10. quit \nSelected Recipient(NONE if blank): #{selected_recipient} \nSelected Emoji(NONE if blank and only for current bot): #{selected_emoji} \nSelected Username(NONE if blank and only for current bot): #{selected_username}" end puts "Thank you for using the Ada Slack CLI!" From 8fac170e298e434a241a5984e32d3219ecc2df83 Mon Sep 17 00:00:00 2001 From: Pauline Chane Date: Thu, 8 Oct 2020 20:34:18 -0700 Subject: [PATCH 50/55] caught error in implementation of sending customized message; modified send_message to account for new parameters --- lib/bot.rb | 28 -- lib/recipient.rb | 6 +- test/bot_test.rb | 4 - test/cassettes/send_message_to_recipient.yml | 191 +++++++++++ .../send_message_to_recipient_from_bot.yml | 320 ++++++++++++++++++ test/recipient_test.rb | 3 + 6 files changed, 518 insertions(+), 34 deletions(-) create mode 100644 test/cassettes/send_message_to_recipient_from_bot.yml diff --git a/lib/bot.rb b/lib/bot.rb index cd3ae72b..7e4faeae 100644 --- a/lib/bot.rb +++ b/lib/bot.rb @@ -44,32 +44,4 @@ def self.list_all bots = bots.filter{ |user| user.is_bot || user.slack_id == "USLACKBOT"} return bots end - - def send_message(message) - # as recommended by Slack API for slack apps - if message.length > 4000 # message too long - # we don't want to break the program unless the API can't connect - # so we do a puts - raise SlackApiError, "Message too long. Try again." - return false - end - url = 'https://slack.com/api/chat.postMessage' - query = { token: Bot.token, - text: message, - channel: @slack_id, - username: @send_as, - icon_emoji: @emoji} # to post to both users and channel - sleep(1) - response = HTTParty.post(url, query: query) - - # check for successful post - unless response.parsed_response['ok'] && response.code == 200 - # we don't want to break the program here because the reason - # could be anything - raise SlackApiError, "Error: #{response.parsed_response['error']}. Please try again" - return false - end - - return response.parsed_response - end end \ No newline at end of file diff --git a/lib/recipient.rb b/lib/recipient.rb index a23a3120..b6a4a195 100644 --- a/lib/recipient.rb +++ b/lib/recipient.rb @@ -11,7 +11,7 @@ def initialize(slack_id:, name:) end # methods - def send_message(message) + def send_message(message, emoji: "", send_as: "") # as recommended by Slack API for slack apps if message.length > 4000 # message too long # we don't want to break the program unless the API can't connect @@ -22,7 +22,9 @@ def send_message(message) url = 'https://slack.com/api/chat.postMessage' query = { token: Recipient.token, text: message, - channel: @slack_id} # to post to both users and channel + channel: @slack_id, + emoji: emoji, + send_as: send_as} # to post to both users and channel sleep(1) response = HTTParty.post(url, query: query) diff --git a/test/bot_test.rb b/test/bot_test.rb index 352850fb..36de3499 100644 --- a/test/bot_test.rb +++ b/test/bot_test.rb @@ -57,9 +57,5 @@ end end end - - describe "send_message" do - - end end diff --git a/test/cassettes/send_message_to_recipient.yml b/test/cassettes/send_message_to_recipient.yml index cd83bafc..a273aae9 100644 --- a/test/cassettes/send_message_to_recipient.yml +++ b/test/cassettes/send_message_to_recipient.yml @@ -254,4 +254,195 @@ http_interactions: encoding: ASCII-8BIT string: '{"ok":false,"error":"channel_not_found"}' recorded_at: Thu, 08 Oct 2020 18:39:15 GMT +- request: + method: post + uri: https://slack.com/api/chat.postMessage?channel=USLACKBOT&emoji=&send_as=&text=maracuyA&token= + body: + encoding: UTF-8 + 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: + Date: + - Fri, 09 Oct 2020 03:28:56 GMT + Server: + - Apache + X-Slack-Req-Id: + - 4f6a5e52da447e6183bcbd109bcbf25b + X-Oauth-Scopes: + - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read,chat:write.customize + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - chat:write + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '335' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-sf8t,haproxy-edge-pdx-vd1y + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channel":"D01CSQTE4QG","ts":"1602214136.000100","message":{"bot_id":"B01C94S0PMJ","type":"message","text":"maracuyA","user":"U01BW7XP2KY","ts":"1602214136.000100","team":"T01C6M7N136","bot_profile":{"id":"B01C94S0PMJ","deleted":false,"name":"Fire + - Pauline - Slack CLI","updated":1602014193,"app_id":"A01BZS74GDB","icons":{"image_36":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_36.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/service_72.png"},"team_id":"T01C6M7N136"}}}' + recorded_at: Fri, 09 Oct 2020 03:28:56 GMT +- request: + method: post + uri: https://slack.com/api/chat.postMessage?channel=C01BKP7MWNB&emoji=&send_as=&text=maracuyA&token= + body: + encoding: UTF-8 + 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: + Date: + - Fri, 09 Oct 2020 03:28:58 GMT + Server: + - Apache + X-Slack-Req-Id: + - dc96827e5327b0e1024e825b2ff6e984 + X-Oauth-Scopes: + - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read,chat:write.customize + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - chat:write + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '337' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-j9uy,haproxy-edge-pdx-r6b3 + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channel":"C01BKP7MWNB","ts":"1602214138.009400","message":{"bot_id":"B01C94S0PMJ","type":"message","text":"maracuyA","user":"U01BW7XP2KY","ts":"1602214138.009400","team":"T01C6M7N136","bot_profile":{"id":"B01C94S0PMJ","deleted":false,"name":"Fire + - Pauline - Slack CLI","updated":1602014193,"app_id":"A01BZS74GDB","icons":{"image_36":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_36.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/service_72.png"},"team_id":"T01C6M7N136"}}}' + recorded_at: Fri, 09 Oct 2020 03:28:58 GMT +- request: + method: post + uri: https://slack.com/api/chat.postMessage?channel=0000000000000000000000&emoji=&send_as=&text=testing&token= + body: + encoding: UTF-8 + 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: + Date: + - Fri, 09 Oct 2020 03:28:59 GMT + Server: + - Apache + X-Slack-Req-Id: + - 226740a363b5fce1dd7ca12026c417aa + X-Oauth-Scopes: + - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read,chat:write.customize + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - chat:write + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '60' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-cv6x,haproxy-edge-pdx-4ut7 + body: + encoding: ASCII-8BIT + string: '{"ok":false,"error":"channel_not_found"}' + recorded_at: Fri, 09 Oct 2020 03:28:59 GMT recorded_with: VCR 6.0.0 diff --git a/test/cassettes/send_message_to_recipient_from_bot.yml b/test/cassettes/send_message_to_recipient_from_bot.yml new file mode 100644 index 00000000..e8155fe9 --- /dev/null +++ b/test/cassettes/send_message_to_recipient_from_bot.yml @@ -0,0 +1,320 @@ +--- +http_interactions: +- request: + method: post + uri: https://slack.com/api/chat.postMessage?channel=USLACKBOT&text=maracuyA&token= + body: + encoding: UTF-8 + 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: + Date: + - Fri, 09 Oct 2020 03:19:05 GMT + Server: + - Apache + X-Slack-Req-Id: + - ef71909ca487c94a2a49fc5c69771488 + X-Oauth-Scopes: + - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read,chat:write.customize + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - chat:write + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '337' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-em6d,haproxy-edge-pdx-rshi + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channel":"D01CSQTE4QG","ts":"1602213545.000100","message":{"bot_id":"B01C94S0PMJ","type":"message","text":"maracuyA","user":"U01BW7XP2KY","ts":"1602213545.000100","team":"T01C6M7N136","bot_profile":{"id":"B01C94S0PMJ","deleted":false,"name":"Fire + - Pauline - Slack CLI","updated":1602014193,"app_id":"A01BZS74GDB","icons":{"image_36":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_36.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/service_72.png"},"team_id":"T01C6M7N136"}}}' + recorded_at: Fri, 09 Oct 2020 03:19:05 GMT +- request: + method: get + uri: https://slack.com/api/conversations.members?channel=D01CSQTE4QG&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: + Date: + - Fri, 09 Oct 2020 03:19:05 GMT + Server: + - Apache + X-Slack-Req-Id: + - 61f6f270cb8de1a0f31766868a8b4583 + X-Oauth-Scopes: + - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read,chat:write.customize + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '106' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-jael,haproxy-edge-pdx-ggfr + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":["U01BW7XP2KY","USLACKBOT"],"response_metadata":{"next_cursor":""}}' + recorded_at: Fri, 09 Oct 2020 03:19:06 GMT +- request: + method: post + uri: https://slack.com/api/chat.postMessage?channel=C01BKP7MWNB&text=maracuyA&token= + body: + encoding: UTF-8 + 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: + Date: + - Fri, 09 Oct 2020 03:19:07 GMT + Server: + - Apache + X-Slack-Req-Id: + - 0cb2321962a68f8f721ca94ad476f729 + X-Oauth-Scopes: + - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read,chat:write.customize + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - chat:write + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '338' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-3bes,haproxy-edge-pdx-rshi + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channel":"C01BKP7MWNB","ts":"1602213547.009300","message":{"bot_id":"B01C94S0PMJ","type":"message","text":"maracuyA","user":"U01BW7XP2KY","ts":"1602213547.009300","team":"T01C6M7N136","bot_profile":{"id":"B01C94S0PMJ","deleted":false,"name":"Fire + - Pauline - Slack CLI","updated":1602014193,"app_id":"A01BZS74GDB","icons":{"image_36":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_36.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/service_72.png"},"team_id":"T01C6M7N136"}}}' + recorded_at: Fri, 09 Oct 2020 03:19:07 GMT +- request: + method: post + uri: https://slack.com/api/chat.postMessage?channel=USLACKBOT&icon_emoji=dog&text=maracuyA&token=&username=Bork + body: + encoding: UTF-8 + 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: + Date: + - Fri, 09 Oct 2020 03:20:17 GMT + Server: + - Apache + X-Slack-Req-Id: + - 13a283d57625a15bc35958bf530cdac2 + X-Oauth-Scopes: + - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read,chat:write.customize + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - chat:write + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '234' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-x7jt,haproxy-edge-pdx-4ut7 + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channel":"D01BUMDABT9","ts":"1602213617.000100","message":{"type":"message","subtype":"bot_message","text":"maracuyA","ts":"1602213617.000100","username":"Bork","icons":{"emoji":"dog","image_64":"https:\/\/a.slack-edge.com\/80588\/img\/emoji_2017_12_06\/apple\/2b55.png"},"bot_id":"B01C94S0PMJ"}}' + recorded_at: Fri, 09 Oct 2020 03:20:17 GMT +- request: + method: get + uri: https://slack.com/api/conversations.members?channel=D01BUMDABT9&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: + Date: + - Fri, 09 Oct 2020 03:20:17 GMT + Server: + - Apache + X-Slack-Req-Id: + - 8e0ae5a76922d8d8b5bc4dbcc1f927e0 + X-Oauth-Scopes: + - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read,chat:write.customize + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '60' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-uju0,haproxy-edge-pdx-4yzm + body: + encoding: ASCII-8BIT + string: '{"ok":false,"error":"channel_not_found"}' + recorded_at: Fri, 09 Oct 2020 03:20:17 GMT +recorded_with: VCR 6.0.0 diff --git a/test/recipient_test.rb b/test/recipient_test.rb index bdc9562e..341d7dbe 100644 --- a/test/recipient_test.rb +++ b/test/recipient_test.rb @@ -59,6 +59,9 @@ end.must_raise SlackApiError end end + it "correctly sends message for customized bot" do + + end end describe 'self.get' do it 'raises a SlackApiError if parameter input is invalid' do From 39da3ab63c8e6e16be09f43506124e6a8f2f04a9 Mon Sep 17 00:00:00 2001 From: Pauline Chane Date: Thu, 8 Oct 2020 20:35:55 -0700 Subject: [PATCH 51/55] fixed parameters for send_message in workspace --- lib/workspace.rb | 2 +- test/cassettes/Workspace_send_message.yml | 65 +++++++++++++++++++++++ 2 files changed, 66 insertions(+), 1 deletion(-) diff --git a/lib/workspace.rb b/lib/workspace.rb index bdbf1dc2..9e607bbe 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -58,7 +58,7 @@ def send_message(message) return nil if @selected.nil? # the driver will reset recipient if true # otherwise will not reset until valid message - return @selected.send_message(message) # the driver will reset recipient if true + return @selected.send_message(message, emoji: @current_bot.emoji, send_as: @current_bot.send_as) # the driver will reset recipient if true end def show_details diff --git a/test/cassettes/Workspace_send_message.yml b/test/cassettes/Workspace_send_message.yml index 0e9ab4d5..e445ae08 100644 --- a/test/cassettes/Workspace_send_message.yml +++ b/test/cassettes/Workspace_send_message.yml @@ -128,4 +128,69 @@ http_interactions: encoding: ASCII-8BIT string: '{"ok":true,"members":["U01BW7XP2KY","USLACKBOT"],"response_metadata":{"next_cursor":""}}' recorded_at: Thu, 08 Oct 2020 19:18:09 GMT +- request: + method: post + uri: https://slack.com/api/chat.postMessage?channel=USLACKBOT&emoji=&send_as=&text=HEY%20LISTEN&token= + body: + encoding: UTF-8 + 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: + Date: + - Fri, 09 Oct 2020 03:35:08 GMT + Server: + - Apache + X-Slack-Req-Id: + - 51af7b217eb56a1dafe0b7f33152c8ad + X-Oauth-Scopes: + - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read,chat:write.customize + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - chat:write + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '340' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-wtop,haproxy-edge-pdx-sqqp + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channel":"D01CSQTE4QG","ts":"1602214508.000100","message":{"bot_id":"B01C94S0PMJ","type":"message","text":"HEY + LISTEN","user":"U01BW7XP2KY","ts":"1602214508.000100","team":"T01C6M7N136","bot_profile":{"id":"B01C94S0PMJ","deleted":false,"name":"Fire + - Pauline - Slack CLI","updated":1602014193,"app_id":"A01BZS74GDB","icons":{"image_36":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_36.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/service_72.png"},"team_id":"T01C6M7N136"}}}' + recorded_at: Fri, 09 Oct 2020 03:35:08 GMT recorded_with: VCR 6.0.0 From f95cefbb0ee9218662767bba99e9841b72705c6f Mon Sep 17 00:00:00 2001 From: Pauline Chane Date: Thu, 8 Oct 2020 21:14:37 -0700 Subject: [PATCH 52/55] fixed test for bot to send with customized emoji --- lib/recipient.rb | 4 +- test/cassettes/send_message_to_recipient.yml | 350 ++++++++++++++++--- test/recipient_test.rb | 8 +- 3 files changed, 311 insertions(+), 51 deletions(-) diff --git a/lib/recipient.rb b/lib/recipient.rb index b6a4a195..da3ad0db 100644 --- a/lib/recipient.rb +++ b/lib/recipient.rb @@ -23,8 +23,8 @@ def send_message(message, emoji: "", send_as: "") query = { token: Recipient.token, text: message, channel: @slack_id, - emoji: emoji, - send_as: send_as} # to post to both users and channel + icon_emoji: emoji, + username: send_as} # to post to both users and channel sleep(1) response = HTTParty.post(url, query: query) diff --git a/test/cassettes/send_message_to_recipient.yml b/test/cassettes/send_message_to_recipient.yml index a273aae9..c8d1f5d0 100644 --- a/test/cassettes/send_message_to_recipient.yml +++ b/test/cassettes/send_message_to_recipient.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: https://slack.com/api/chat.postMessage?channel=C01BKP7MWNB&text=maracuyA&token= + uri: https://slack.com/api/chat.postMessage?channel=USLACKBOT&emoji=dog&send_as=woof&text=hi&token= body: encoding: UTF-8 string: '' @@ -19,13 +19,13 @@ http_interactions: message: OK headers: Date: - - Thu, 08 Oct 2020 18:39:11 GMT + - Fri, 09 Oct 2020 03:42:41 GMT Server: - Apache X-Slack-Req-Id: - - f7ef82609d1d3c6bfb8a70913834cfc8 + - 400fe0ad7807274841fa7c8236f8f734 X-Oauth-Scopes: - - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read + - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read,chat:write.customize Access-Control-Expose-Headers: - x-slack-req-id, retry-after Access-Control-Allow-Origin: @@ -54,19 +54,19 @@ http_interactions: Referrer-Policy: - no-referrer Content-Length: - - '338' + - '334' Content-Type: - application/json; charset=utf-8 X-Via: - - haproxy-www-eyic,haproxy-edge-pdx-vd1y + - haproxy-www-zqhb,haproxy-edge-pdx-68eo body: encoding: ASCII-8BIT - string: '{"ok":true,"channel":"C01BKP7MWNB","ts":"1602182352.001500","message":{"bot_id":"B01C94S0PMJ","type":"message","text":"maracuyA","user":"U01BW7XP2KY","ts":"1602182352.001500","team":"T01C6M7N136","bot_profile":{"id":"B01C94S0PMJ","deleted":false,"name":"Fire + string: '{"ok":true,"channel":"D01CSQTE4QG","ts":"1602214961.000400","message":{"bot_id":"B01C94S0PMJ","type":"message","text":"hi","user":"U01BW7XP2KY","ts":"1602214961.000400","team":"T01C6M7N136","bot_profile":{"id":"B01C94S0PMJ","deleted":false,"name":"Fire - Pauline - Slack CLI","updated":1602014193,"app_id":"A01BZS74GDB","icons":{"image_36":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_36.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/service_72.png"},"team_id":"T01C6M7N136"}}}' - recorded_at: Thu, 08 Oct 2020 18:39:12 GMT + recorded_at: Fri, 09 Oct 2020 03:42:42 GMT - request: method: post - uri: https://slack.com/api/chat.postMessage?channel=USLACKBOT&text=maracuyA&token= + uri: https://slack.com/api/chat.postMessage?channel=0000000000000000000000&emoji=&send_as=&text=testing&token= body: encoding: UTF-8 string: '' @@ -83,13 +83,76 @@ http_interactions: message: OK headers: Date: - - Thu, 08 Oct 2020 18:39:13 GMT + - Fri, 09 Oct 2020 03:49:45 GMT Server: - Apache X-Slack-Req-Id: - - 6ce0802185744d80ecf18629b5e29e56 + - 8ef952fb81409062911e1dbd3941a5e3 X-Oauth-Scopes: - - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read + - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read,chat:write.customize + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - chat:write + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '60' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-7n0o,haproxy-edge-pdx-pim9 + body: + encoding: ASCII-8BIT + string: '{"ok":false,"error":"channel_not_found"}' + recorded_at: Fri, 09 Oct 2020 03:49:45 GMT +- request: + method: post + uri: https://slack.com/api/chat.postMessage?channel=USLACKBOT&emoji=&send_as=&text=maracuyA&token= + body: + encoding: UTF-8 + 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: + Date: + - Fri, 09 Oct 2020 03:49:47 GMT + Server: + - Apache + X-Slack-Req-Id: + - 7b81d0e0da4f5e174f62d6a0b41cb37a + X-Oauth-Scopes: + - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read,chat:write.customize Access-Control-Expose-Headers: - x-slack-req-id, retry-after Access-Control-Allow-Origin: @@ -122,12 +185,12 @@ http_interactions: Content-Type: - application/json; charset=utf-8 X-Via: - - haproxy-www-35ul,haproxy-edge-pdx-snuh + - haproxy-www-swz0,haproxy-edge-pdx-iofq body: encoding: ASCII-8BIT - string: '{"ok":true,"channel":"D01CSQTE4QG","ts":"1602182353.000100","message":{"bot_id":"B01C94S0PMJ","type":"message","text":"maracuyA","user":"U01BW7XP2KY","ts":"1602182353.000100","team":"T01C6M7N136","bot_profile":{"id":"B01C94S0PMJ","deleted":false,"name":"Fire + string: '{"ok":true,"channel":"D01CSQTE4QG","ts":"1602215387.000100","message":{"bot_id":"B01C94S0PMJ","type":"message","text":"maracuyA","user":"U01BW7XP2KY","ts":"1602215387.000100","team":"T01C6M7N136","bot_profile":{"id":"B01C94S0PMJ","deleted":false,"name":"Fire - Pauline - Slack CLI","updated":1602014193,"app_id":"A01BZS74GDB","icons":{"image_36":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_36.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/service_72.png"},"team_id":"T01C6M7N136"}}}' - recorded_at: Thu, 08 Oct 2020 18:39:13 GMT + recorded_at: Fri, 09 Oct 2020 03:49:47 GMT - request: method: get uri: https://slack.com/api/conversations.members?channel=D01CSQTE4QG&token= @@ -147,13 +210,13 @@ http_interactions: message: OK headers: Date: - - Thu, 08 Oct 2020 18:39:14 GMT + - Fri, 09 Oct 2020 03:49:47 GMT Server: - Apache X-Slack-Req-Id: - - fc5114efb78bab528ad9eb243c312d35 + - 500e389e34f6a4ffdb2b85a89c953626 X-Oauth-Scopes: - - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read + - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read,chat:write.customize Access-Control-Expose-Headers: - x-slack-req-id, retry-after Access-Control-Allow-Origin: @@ -186,14 +249,14 @@ http_interactions: Content-Type: - application/json; charset=utf-8 X-Via: - - haproxy-www-0lio,haproxy-edge-pdx-1nke + - haproxy-www-gewl,haproxy-edge-pdx-9tv4 body: encoding: ASCII-8BIT string: '{"ok":true,"members":["U01BW7XP2KY","USLACKBOT"],"response_metadata":{"next_cursor":""}}' - recorded_at: Thu, 08 Oct 2020 18:39:14 GMT + recorded_at: Fri, 09 Oct 2020 03:49:47 GMT - request: method: post - uri: https://slack.com/api/chat.postMessage?channel=0000000000000000000000&text=testing&token= + uri: https://slack.com/api/chat.postMessage?channel=C01BKP7MWNB&emoji=&send_as=&text=maracuyA&token= body: encoding: UTF-8 string: '' @@ -210,13 +273,13 @@ http_interactions: message: OK headers: Date: - - Thu, 08 Oct 2020 18:39:15 GMT + - Fri, 09 Oct 2020 03:49:49 GMT Server: - Apache X-Slack-Req-Id: - - 3f2d81bf569200d9ffb7897ad5bebb00 + - 40e652e97fa8cfe270dfcd11242c4a50 X-Oauth-Scopes: - - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read + - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read,chat:write.customize Access-Control-Expose-Headers: - x-slack-req-id, retry-after Access-Control-Allow-Origin: @@ -245,18 +308,19 @@ http_interactions: Referrer-Policy: - no-referrer Content-Length: - - '60' + - '338' Content-Type: - application/json; charset=utf-8 X-Via: - - haproxy-www-j9ms,haproxy-edge-pdx-1cbr + - haproxy-www-r76q,haproxy-edge-pdx-vs95 body: encoding: ASCII-8BIT - string: '{"ok":false,"error":"channel_not_found"}' - recorded_at: Thu, 08 Oct 2020 18:39:15 GMT + string: '{"ok":true,"channel":"C01BKP7MWNB","ts":"1602215389.009500","message":{"bot_id":"B01C94S0PMJ","type":"message","text":"maracuyA","user":"U01BW7XP2KY","ts":"1602215389.009500","team":"T01C6M7N136","bot_profile":{"id":"B01C94S0PMJ","deleted":false,"name":"Fire + - Pauline - Slack CLI","updated":1602014193,"app_id":"A01BZS74GDB","icons":{"image_36":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_36.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/service_72.png"},"team_id":"T01C6M7N136"}}}' + recorded_at: Fri, 09 Oct 2020 03:49:49 GMT - request: method: post - uri: https://slack.com/api/chat.postMessage?channel=USLACKBOT&emoji=&send_as=&text=maracuyA&token= + uri: https://slack.com/api/chat.postMessage?channel=C01BKP7MWNB&emoji=dog&send_as=woof&text=hi&token= body: encoding: UTF-8 string: '' @@ -273,11 +337,11 @@ http_interactions: message: OK headers: Date: - - Fri, 09 Oct 2020 03:28:56 GMT + - Fri, 09 Oct 2020 04:12:44 GMT Server: - Apache X-Slack-Req-Id: - - 4f6a5e52da447e6183bcbd109bcbf25b + - 54ece49fbc78400b06fea69fe76bf52e X-Oauth-Scopes: - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read,chat:write.customize Access-Control-Expose-Headers: @@ -308,19 +372,19 @@ http_interactions: Referrer-Policy: - no-referrer Content-Length: - - '335' + - '333' Content-Type: - application/json; charset=utf-8 X-Via: - - haproxy-www-sf8t,haproxy-edge-pdx-vd1y + - haproxy-www-f98x,haproxy-edge-pdx-bm9l body: encoding: ASCII-8BIT - string: '{"ok":true,"channel":"D01CSQTE4QG","ts":"1602214136.000100","message":{"bot_id":"B01C94S0PMJ","type":"message","text":"maracuyA","user":"U01BW7XP2KY","ts":"1602214136.000100","team":"T01C6M7N136","bot_profile":{"id":"B01C94S0PMJ","deleted":false,"name":"Fire + string: '{"ok":true,"channel":"C01BKP7MWNB","ts":"1602216764.009600","message":{"bot_id":"B01C94S0PMJ","type":"message","text":"hi","user":"U01BW7XP2KY","ts":"1602216764.009600","team":"T01C6M7N136","bot_profile":{"id":"B01C94S0PMJ","deleted":false,"name":"Fire - Pauline - Slack CLI","updated":1602014193,"app_id":"A01BZS74GDB","icons":{"image_36":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_36.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/service_72.png"},"team_id":"T01C6M7N136"}}}' - recorded_at: Fri, 09 Oct 2020 03:28:56 GMT + recorded_at: Fri, 09 Oct 2020 04:12:44 GMT - request: method: post - uri: https://slack.com/api/chat.postMessage?channel=C01BKP7MWNB&emoji=&send_as=&text=maracuyA&token= + uri: https://slack.com/api/chat.postMessage?channel=C01BKP7MWNB&icon_emoji=&text=maracuyA&token=&username= body: encoding: UTF-8 string: '' @@ -337,11 +401,11 @@ http_interactions: message: OK headers: Date: - - Fri, 09 Oct 2020 03:28:58 GMT + - Fri, 09 Oct 2020 04:13:41 GMT Server: - Apache X-Slack-Req-Id: - - dc96827e5327b0e1024e825b2ff6e984 + - 36252c3a22e5b69621a70a40b963344c X-Oauth-Scopes: - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read,chat:write.customize Access-Control-Expose-Headers: @@ -372,19 +436,19 @@ http_interactions: Referrer-Policy: - no-referrer Content-Length: - - '337' + - '175' Content-Type: - application/json; charset=utf-8 X-Via: - - haproxy-www-j9uy,haproxy-edge-pdx-r6b3 + - haproxy-www-572o,haproxy-edge-pdx-vs95 body: encoding: ASCII-8BIT - string: '{"ok":true,"channel":"C01BKP7MWNB","ts":"1602214138.009400","message":{"bot_id":"B01C94S0PMJ","type":"message","text":"maracuyA","user":"U01BW7XP2KY","ts":"1602214138.009400","team":"T01C6M7N136","bot_profile":{"id":"B01C94S0PMJ","deleted":false,"name":"Fire - - Pauline - Slack CLI","updated":1602014193,"app_id":"A01BZS74GDB","icons":{"image_36":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_36.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/service_72.png"},"team_id":"T01C6M7N136"}}}' - recorded_at: Fri, 09 Oct 2020 03:28:58 GMT + string: '{"ok":true,"channel":"C01BKP7MWNB","ts":"1602216821.009800","message":{"type":"message","subtype":"bot_message","text":"maracuyA","ts":"1602216821.009800","username":"Fire + - Pauline - Slack CLI","bot_id":"B01C94S0PMJ"}}' + recorded_at: Fri, 09 Oct 2020 04:13:41 GMT - request: method: post - uri: https://slack.com/api/chat.postMessage?channel=0000000000000000000000&emoji=&send_as=&text=testing&token= + uri: https://slack.com/api/chat.postMessage?channel=0000000000000000000000&icon_emoji=&text=testing&token=&username= body: encoding: UTF-8 string: '' @@ -401,11 +465,11 @@ http_interactions: message: OK headers: Date: - - Fri, 09 Oct 2020 03:28:59 GMT + - Fri, 09 Oct 2020 04:13:42 GMT Server: - Apache X-Slack-Req-Id: - - 226740a363b5fce1dd7ca12026c417aa + - 6234dc14721867df9eb6f720bbdf8685 X-Oauth-Scopes: - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read,chat:write.customize Access-Control-Expose-Headers: @@ -440,9 +504,199 @@ http_interactions: Content-Type: - application/json; charset=utf-8 X-Via: - - haproxy-www-cv6x,haproxy-edge-pdx-4ut7 + - haproxy-www-5fg6,haproxy-edge-pdx-9tv4 + body: + encoding: ASCII-8BIT + string: '{"ok":false,"error":"channel_not_found"}' + recorded_at: Fri, 09 Oct 2020 04:13:42 GMT +- request: + method: post + uri: https://slack.com/api/chat.postMessage?channel=C01BKP7MWNB&icon_emoji=dog&text=hi&token=&username=woof + body: + encoding: UTF-8 + 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: + Date: + - Fri, 09 Oct 2020 04:13:43 GMT + Server: + - Apache + X-Slack-Req-Id: + - 81d7d140f7a12e2ca397c989033905df + X-Oauth-Scopes: + - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read,chat:write.customize + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - chat:write + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '230' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-kot6,haproxy-edge-pdx-rqgu + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channel":"C01BKP7MWNB","ts":"1602216823.009900","message":{"type":"message","subtype":"bot_message","text":"hi","ts":"1602216823.009900","username":"woof","icons":{"emoji":"dog","image_64":"https:\/\/a.slack-edge.com\/80588\/img\/emoji_2017_12_06\/apple\/2b55.png"},"bot_id":"B01C94S0PMJ"}}' + recorded_at: Fri, 09 Oct 2020 04:13:43 GMT +- request: + method: post + uri: https://slack.com/api/chat.postMessage?channel=USLACKBOT&icon_emoji=&text=maracuyA&token=&username= + body: + encoding: UTF-8 + 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: + Date: + - Fri, 09 Oct 2020 04:13:45 GMT + Server: + - Apache + X-Slack-Req-Id: + - 8243011a1fdd0620af85db2dc042ab73 + X-Oauth-Scopes: + - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read,chat:write.customize + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - chat:write + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '174' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-9bd2,haproxy-edge-pdx-xphl + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channel":"D01BUMDABT9","ts":"1602216825.000100","message":{"type":"message","subtype":"bot_message","text":"maracuyA","ts":"1602216825.000100","username":"Fire + - Pauline - Slack CLI","bot_id":"B01C94S0PMJ"}}' + recorded_at: Fri, 09 Oct 2020 04:13:45 GMT +- request: + method: get + uri: https://slack.com/api/conversations.members?channel=D01BUMDABT9&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: + Date: + - Fri, 09 Oct 2020 04:13:45 GMT + Server: + - Apache + X-Slack-Req-Id: + - 8d019d8c000dddbc7592d968cb273b42 + X-Oauth-Scopes: + - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read,chat:write.customize + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '60' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-xlhq,haproxy-edge-pdx-gxzc body: encoding: ASCII-8BIT string: '{"ok":false,"error":"channel_not_found"}' - recorded_at: Fri, 09 Oct 2020 03:28:59 GMT + recorded_at: Fri, 09 Oct 2020 04:13:45 GMT recorded_with: VCR 6.0.0 diff --git a/test/recipient_test.rb b/test/recipient_test.rb index 341d7dbe..a68711ad 100644 --- a/test/recipient_test.rb +++ b/test/recipient_test.rb @@ -60,7 +60,13 @@ end end it "correctly sends message for customized bot" do - + VCR.use_cassette("send_message_to_recipient") do + channel = Recipient.new(slack_id: "C01BKP7MWNB",name: "random") + response = channel.send_message("hi", emoji: "dog", send_as: "woof") + puts "hi" + expect(response["message"]["username"]).must_equal "woof" + expect(response["message"]["icons"]["emoji"]).must_equal "dog" + end end end describe 'self.get' do From d6c315a8766b6816a27b7d297232e715e71f855e Mon Sep 17 00:00:00 2001 From: Pauline Chane Date: Thu, 8 Oct 2020 21:23:49 -0700 Subject: [PATCH 53/55] very minor fixes to slack.rb, should be working now :D --- lib/slack.rb | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/lib/slack.rb b/lib/slack.rb index 8ae1d9a5..42375895 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -30,7 +30,7 @@ def main puts puts "This workspace has #{workspace.users.length} users and #{workspace.channels.length} channels" puts - puts "Choose from the following \n 1. list channels \n 2. list users \n 3. select user \n 4. select channel \n 5. details \n 6. send message \n 7. clear selection \n 8. message history \n 9. set emoji and username \n 10. quit \nSelected Recipient(NONE if blank): #{selected_recipient} \nSelected Emoji(NONE if blank and only for current bot): #{selected_recipient} \nSelected Username(NONE if blank and only for current bot): #{selected_username}" + puts "Choose from the following \n 1. list channels \n 2. list users \n 3. select user \n 4. select channel \n 5. details \n 6. send message \n 7. clear selection \n 8. message history \n 9. set emoji and username \n 10. quit \nSelected Recipient(NONE if blank): #{selected_recipient} \nSelected Emoji(NONE if blank and only for current bot): #{selected_emoji} \nSelected Username(NONE if blank and only for current bot): #{selected_username}" puts user_input = "" @@ -85,8 +85,7 @@ def main message_history = get_message_history(workspace.selected) ap message_history when "set emoji and username" - if workspace.current_bot.slack_id == workspace.selected.slack_id - puts "Which emoji would you like to add?" + puts "Which emoji would you like to add?" emoji = gets.strip selected_emoji = emoji begin @@ -94,18 +93,10 @@ def main rescue ArgumentError => error puts error.message end - else - puts "You can only set the emoji for the current bot." - end - - if workspace.current_bot.name == workspace.selected.name puts "What would you like to set the username of the bot as?" username = gets.strip selected_username = username bot.set_send_as(username) - else - puts "You can only set the username for the current bot." - end else puts "That's not a valid option. Please try again." end From 8be0ff48fd809d40ae5762ff22bc64aa9838348d Mon Sep 17 00:00:00 2001 From: Pauline Chane Date: Thu, 8 Oct 2020 21:47:08 -0700 Subject: [PATCH 54/55] fixed emoji check regex and bug from opening empty message history file --- lib/bot.rb | 2 +- lib/slack.rb | 12 ++++++++++-- message_history.csv | 1 + 3 files changed, 12 insertions(+), 3 deletions(-) create mode 100644 message_history.csv diff --git a/lib/bot.rb b/lib/bot.rb index 7e4faeae..c522fa47 100644 --- a/lib/bot.rb +++ b/lib/bot.rb @@ -29,7 +29,7 @@ def self.current_bot def set_emoji(emoji) # regex checks for correct emoji format: # (:EMOJI:, EMOJI, alphanumeric and dashes only (can also have exactly TWO colons on either side)) - raise ArgumentError, "invalid emoji" unless /^(:\w+:)/ =~ emoji || /^(\w+)/ =~ emoji + raise ArgumentError, "invalid emoji" unless /^(:[a-zA-Z0-9_]+:)/ =~ emoji || /^([a-zA-Z0-9_]+)/ =~ emoji @emoji = emoji return emoji end diff --git a/lib/slack.rb b/lib/slack.rb index 42375895..b9ab165a 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -26,6 +26,7 @@ def main selected_recipient = nil selected_emoji = nil selected_username = nil + history_file = false puts puts "This workspace has #{workspace.users.length} users and #{workspace.channels.length} channels" @@ -74,6 +75,7 @@ def main rescue SlackApiError => error puts error.message end + history_file = true end when "clear selection" workspace.clear_selection @@ -82,8 +84,14 @@ def main user_input = "quit" break when "message history" - message_history = get_message_history(workspace.selected) - ap message_history + if workspace.selected.nil? + puts "Please select a channel or user before sending a message." + elsif !history_file + puts "No messages sent yet." + else + message_history = get_message_history(workspace.selected) + ap message_history + end when "set emoji and username" puts "Which emoji would you like to add?" emoji = gets.strip diff --git a/message_history.csv b/message_history.csv new file mode 100644 index 00000000..8ef119e1 --- /dev/null +++ b/message_history.csv @@ -0,0 +1 @@ +pauline.chane,U01BKP7MGVD,yay From aa96ec5e891c7af0245084ab00b3ee48ea5a467b Mon Sep 17 00:00:00 2001 From: Pauline Chane Date: Fri, 9 Oct 2020 10:32:55 -0700 Subject: [PATCH 55/55] fixed failing test on send_message methods --- test/cassettes/Workspace_send_message.yml | 127 +++++ test/cassettes/send_message_to_recipient.yml | 491 +------------------ test/recipient_test.rb | 10 +- test/workspace_test.rb | 6 +- 4 files changed, 153 insertions(+), 481 deletions(-) diff --git a/test/cassettes/Workspace_send_message.yml b/test/cassettes/Workspace_send_message.yml index e445ae08..57fa61c0 100644 --- a/test/cassettes/Workspace_send_message.yml +++ b/test/cassettes/Workspace_send_message.yml @@ -193,4 +193,131 @@ http_interactions: LISTEN","user":"U01BW7XP2KY","ts":"1602214508.000100","team":"T01C6M7N136","bot_profile":{"id":"B01C94S0PMJ","deleted":false,"name":"Fire - Pauline - Slack CLI","updated":1602014193,"app_id":"A01BZS74GDB","icons":{"image_36":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_36.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/service_72.png"},"team_id":"T01C6M7N136"}}}' recorded_at: Fri, 09 Oct 2020 03:35:08 GMT +- request: + method: post + uri: https://slack.com/api/chat.postMessage?channel=USLACKBOT&icon_emoji=&text=HEY%20LISTEN&token=&username= + body: + encoding: UTF-8 + 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: + Date: + - Fri, 09 Oct 2020 17:10:31 GMT + Server: + - Apache + X-Slack-Req-Id: + - 221f71cdae65cc5ea138601a0eb29c96 + X-Oauth-Scopes: + - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read,chat:write.customize + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - chat:write + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '179' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-m88x,haproxy-edge-pdx-cre0 + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channel":"D01BUMDABT9","ts":"1602263431.000100","message":{"type":"message","subtype":"bot_message","text":"HEY + LISTEN","ts":"1602263431.000100","username":"Fire - Pauline - Slack CLI","bot_id":"B01C94S0PMJ"}}' + recorded_at: Fri, 09 Oct 2020 17:10:31 GMT +- request: + method: get + uri: https://slack.com/api/conversations.members?channel=D01BUMDABT9&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: + Date: + - Fri, 09 Oct 2020 17:10:31 GMT + Server: + - Apache + X-Slack-Req-Id: + - 74b9e9f3ac4bc6849c71db10a1340db8 + X-Oauth-Scopes: + - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read,chat:write.customize + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Access-Control-Allow-Origin: + - "*" + X-Slack-Backend: + - r + X-Content-Type-Options: + - nosniff + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, + x-b3-sampled, x-b3-flags + Vary: + - Accept-Encoding + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Content-Length: + - '60' + Content-Type: + - application/json; charset=utf-8 + X-Via: + - haproxy-www-w9x0,haproxy-edge-pdx-ttqn + body: + encoding: ASCII-8BIT + string: '{"ok":false,"error":"channel_not_found"}' + recorded_at: Fri, 09 Oct 2020 17:10:31 GMT recorded_with: VCR 6.0.0 diff --git a/test/cassettes/send_message_to_recipient.yml b/test/cassettes/send_message_to_recipient.yml index c8d1f5d0..ffe0b3f9 100644 --- a/test/cassettes/send_message_to_recipient.yml +++ b/test/cassettes/send_message_to_recipient.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: https://slack.com/api/chat.postMessage?channel=USLACKBOT&emoji=dog&send_as=woof&text=hi&token= + uri: https://slack.com/api/chat.postMessage?channel=U01BKP7MGVD&icon_emoji=&text=maracuyA&token=&username= body: encoding: UTF-8 string: '' @@ -19,11 +19,11 @@ http_interactions: message: OK headers: Date: - - Fri, 09 Oct 2020 03:42:41 GMT + - Fri, 09 Oct 2020 17:23:23 GMT Server: - Apache X-Slack-Req-Id: - - 400fe0ad7807274841fa7c8236f8f734 + - fb46e3b1762506f3954db3d513135472 X-Oauth-Scopes: - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read,chat:write.customize Access-Control-Expose-Headers: @@ -54,19 +54,19 @@ http_interactions: Referrer-Policy: - no-referrer Content-Length: - - '334' + - '173' Content-Type: - application/json; charset=utf-8 X-Via: - - haproxy-www-zqhb,haproxy-edge-pdx-68eo + - haproxy-www-xsri,haproxy-edge-pdx-ed3w body: encoding: ASCII-8BIT - string: '{"ok":true,"channel":"D01CSQTE4QG","ts":"1602214961.000400","message":{"bot_id":"B01C94S0PMJ","type":"message","text":"hi","user":"U01BW7XP2KY","ts":"1602214961.000400","team":"T01C6M7N136","bot_profile":{"id":"B01C94S0PMJ","deleted":false,"name":"Fire - - Pauline - Slack CLI","updated":1602014193,"app_id":"A01BZS74GDB","icons":{"image_36":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_36.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/service_72.png"},"team_id":"T01C6M7N136"}}}' - recorded_at: Fri, 09 Oct 2020 03:42:42 GMT + string: '{"ok":true,"channel":"D01CD4P11J5","ts":"1602264203.000100","message":{"type":"message","subtype":"bot_message","text":"maracuyA","ts":"1602264203.000100","username":"Fire + - Pauline - Slack CLI","bot_id":"B01C94S0PMJ"}}' + recorded_at: Fri, 09 Oct 2020 17:23:23 GMT - request: method: post - uri: https://slack.com/api/chat.postMessage?channel=0000000000000000000000&emoji=&send_as=&text=testing&token= + uri: https://slack.com/api/chat.postMessage?channel=0000000000000000000000&icon_emoji=&text=testing&token=&username= body: encoding: UTF-8 string: '' @@ -83,11 +83,11 @@ http_interactions: message: OK headers: Date: - - Fri, 09 Oct 2020 03:49:45 GMT + - Fri, 09 Oct 2020 17:27:35 GMT Server: - Apache X-Slack-Req-Id: - - 8ef952fb81409062911e1dbd3941a5e3 + - a41107ffb5a72935fa89d8df0de03a5f X-Oauth-Scopes: - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read,chat:write.customize Access-Control-Expose-Headers: @@ -122,266 +122,11 @@ http_interactions: Content-Type: - application/json; charset=utf-8 X-Via: - - haproxy-www-7n0o,haproxy-edge-pdx-pim9 + - haproxy-www-wsih,haproxy-edge-pdx-74gg body: encoding: ASCII-8BIT string: '{"ok":false,"error":"channel_not_found"}' - recorded_at: Fri, 09 Oct 2020 03:49:45 GMT -- request: - method: post - uri: https://slack.com/api/chat.postMessage?channel=USLACKBOT&emoji=&send_as=&text=maracuyA&token= - body: - encoding: UTF-8 - 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: - Date: - - Fri, 09 Oct 2020 03:49:47 GMT - Server: - - Apache - X-Slack-Req-Id: - - 7b81d0e0da4f5e174f62d6a0b41cb37a - X-Oauth-Scopes: - - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read,chat:write.customize - Access-Control-Expose-Headers: - - x-slack-req-id, retry-after - Access-Control-Allow-Origin: - - "*" - X-Slack-Backend: - - r - X-Content-Type-Options: - - nosniff - Expires: - - Mon, 26 Jul 1997 05:00:00 GMT - Cache-Control: - - private, no-cache, no-store, must-revalidate - X-Xss-Protection: - - '0' - X-Accepted-Oauth-Scopes: - - chat:write - Access-Control-Allow-Headers: - - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, - x-b3-sampled, x-b3-flags - Vary: - - Accept-Encoding - Pragma: - - no-cache - Strict-Transport-Security: - - max-age=31536000; includeSubDomains; preload - Referrer-Policy: - - no-referrer - Content-Length: - - '337' - Content-Type: - - application/json; charset=utf-8 - X-Via: - - haproxy-www-swz0,haproxy-edge-pdx-iofq - body: - encoding: ASCII-8BIT - string: '{"ok":true,"channel":"D01CSQTE4QG","ts":"1602215387.000100","message":{"bot_id":"B01C94S0PMJ","type":"message","text":"maracuyA","user":"U01BW7XP2KY","ts":"1602215387.000100","team":"T01C6M7N136","bot_profile":{"id":"B01C94S0PMJ","deleted":false,"name":"Fire - - Pauline - Slack CLI","updated":1602014193,"app_id":"A01BZS74GDB","icons":{"image_36":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_36.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/service_72.png"},"team_id":"T01C6M7N136"}}}' - recorded_at: Fri, 09 Oct 2020 03:49:47 GMT -- request: - method: get - uri: https://slack.com/api/conversations.members?channel=D01CSQTE4QG&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: - Date: - - Fri, 09 Oct 2020 03:49:47 GMT - Server: - - Apache - X-Slack-Req-Id: - - 500e389e34f6a4ffdb2b85a89c953626 - X-Oauth-Scopes: - - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read,chat:write.customize - Access-Control-Expose-Headers: - - x-slack-req-id, retry-after - Access-Control-Allow-Origin: - - "*" - X-Slack-Backend: - - r - X-Content-Type-Options: - - nosniff - Expires: - - Mon, 26 Jul 1997 05:00:00 GMT - Cache-Control: - - private, no-cache, no-store, must-revalidate - X-Xss-Protection: - - '0' - X-Accepted-Oauth-Scopes: - - channels:read,groups:read,mpim:read,im:read,read - Access-Control-Allow-Headers: - - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, - x-b3-sampled, x-b3-flags - Vary: - - Accept-Encoding - Pragma: - - no-cache - Strict-Transport-Security: - - max-age=31536000; includeSubDomains; preload - Referrer-Policy: - - no-referrer - Content-Length: - - '106' - Content-Type: - - application/json; charset=utf-8 - X-Via: - - haproxy-www-gewl,haproxy-edge-pdx-9tv4 - body: - encoding: ASCII-8BIT - string: '{"ok":true,"members":["U01BW7XP2KY","USLACKBOT"],"response_metadata":{"next_cursor":""}}' - recorded_at: Fri, 09 Oct 2020 03:49:47 GMT -- request: - method: post - uri: https://slack.com/api/chat.postMessage?channel=C01BKP7MWNB&emoji=&send_as=&text=maracuyA&token= - body: - encoding: UTF-8 - 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: - Date: - - Fri, 09 Oct 2020 03:49:49 GMT - Server: - - Apache - X-Slack-Req-Id: - - 40e652e97fa8cfe270dfcd11242c4a50 - X-Oauth-Scopes: - - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read,chat:write.customize - Access-Control-Expose-Headers: - - x-slack-req-id, retry-after - Access-Control-Allow-Origin: - - "*" - X-Slack-Backend: - - r - X-Content-Type-Options: - - nosniff - Expires: - - Mon, 26 Jul 1997 05:00:00 GMT - Cache-Control: - - private, no-cache, no-store, must-revalidate - X-Xss-Protection: - - '0' - X-Accepted-Oauth-Scopes: - - chat:write - Access-Control-Allow-Headers: - - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, - x-b3-sampled, x-b3-flags - Vary: - - Accept-Encoding - Pragma: - - no-cache - Strict-Transport-Security: - - max-age=31536000; includeSubDomains; preload - Referrer-Policy: - - no-referrer - Content-Length: - - '338' - Content-Type: - - application/json; charset=utf-8 - X-Via: - - haproxy-www-r76q,haproxy-edge-pdx-vs95 - body: - encoding: ASCII-8BIT - string: '{"ok":true,"channel":"C01BKP7MWNB","ts":"1602215389.009500","message":{"bot_id":"B01C94S0PMJ","type":"message","text":"maracuyA","user":"U01BW7XP2KY","ts":"1602215389.009500","team":"T01C6M7N136","bot_profile":{"id":"B01C94S0PMJ","deleted":false,"name":"Fire - - Pauline - Slack CLI","updated":1602014193,"app_id":"A01BZS74GDB","icons":{"image_36":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_36.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/service_72.png"},"team_id":"T01C6M7N136"}}}' - recorded_at: Fri, 09 Oct 2020 03:49:49 GMT -- request: - method: post - uri: https://slack.com/api/chat.postMessage?channel=C01BKP7MWNB&emoji=dog&send_as=woof&text=hi&token= - body: - encoding: UTF-8 - 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: - Date: - - Fri, 09 Oct 2020 04:12:44 GMT - Server: - - Apache - X-Slack-Req-Id: - - 54ece49fbc78400b06fea69fe76bf52e - X-Oauth-Scopes: - - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read,chat:write.customize - Access-Control-Expose-Headers: - - x-slack-req-id, retry-after - Access-Control-Allow-Origin: - - "*" - X-Slack-Backend: - - r - X-Content-Type-Options: - - nosniff - Expires: - - Mon, 26 Jul 1997 05:00:00 GMT - Cache-Control: - - private, no-cache, no-store, must-revalidate - X-Xss-Protection: - - '0' - X-Accepted-Oauth-Scopes: - - chat:write - Access-Control-Allow-Headers: - - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, - x-b3-sampled, x-b3-flags - Vary: - - Accept-Encoding - Pragma: - - no-cache - Strict-Transport-Security: - - max-age=31536000; includeSubDomains; preload - Referrer-Policy: - - no-referrer - Content-Length: - - '333' - Content-Type: - - application/json; charset=utf-8 - X-Via: - - haproxy-www-f98x,haproxy-edge-pdx-bm9l - body: - encoding: ASCII-8BIT - string: '{"ok":true,"channel":"C01BKP7MWNB","ts":"1602216764.009600","message":{"bot_id":"B01C94S0PMJ","type":"message","text":"hi","user":"U01BW7XP2KY","ts":"1602216764.009600","team":"T01C6M7N136","bot_profile":{"id":"B01C94S0PMJ","deleted":false,"name":"Fire - - Pauline - Slack CLI","updated":1602014193,"app_id":"A01BZS74GDB","icons":{"image_36":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_36.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/bot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/plugins\/app\/service_72.png"},"team_id":"T01C6M7N136"}}}' - recorded_at: Fri, 09 Oct 2020 04:12:44 GMT + recorded_at: Fri, 09 Oct 2020 17:27:35 GMT - request: method: post uri: https://slack.com/api/chat.postMessage?channel=C01BKP7MWNB&icon_emoji=&text=maracuyA&token=&username= @@ -401,11 +146,11 @@ http_interactions: message: OK headers: Date: - - Fri, 09 Oct 2020 04:13:41 GMT + - Fri, 09 Oct 2020 17:27:36 GMT Server: - Apache X-Slack-Req-Id: - - 36252c3a22e5b69621a70a40b963344c + - 3cc81fd22d01bdb90af043c670c6b437 X-Oauth-Scopes: - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read,chat:write.customize Access-Control-Expose-Headers: @@ -440,75 +185,12 @@ http_interactions: Content-Type: - application/json; charset=utf-8 X-Via: - - haproxy-www-572o,haproxy-edge-pdx-vs95 + - haproxy-www-cv6x,haproxy-edge-pdx-333x body: encoding: ASCII-8BIT - string: '{"ok":true,"channel":"C01BKP7MWNB","ts":"1602216821.009800","message":{"type":"message","subtype":"bot_message","text":"maracuyA","ts":"1602216821.009800","username":"Fire + string: '{"ok":true,"channel":"C01BKP7MWNB","ts":"1602264456.000100","message":{"type":"message","subtype":"bot_message","text":"maracuyA","ts":"1602264456.000100","username":"Fire - Pauline - Slack CLI","bot_id":"B01C94S0PMJ"}}' - recorded_at: Fri, 09 Oct 2020 04:13:41 GMT -- request: - method: post - uri: https://slack.com/api/chat.postMessage?channel=0000000000000000000000&icon_emoji=&text=testing&token=&username= - body: - encoding: UTF-8 - 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: - Date: - - Fri, 09 Oct 2020 04:13:42 GMT - Server: - - Apache - X-Slack-Req-Id: - - 6234dc14721867df9eb6f720bbdf8685 - X-Oauth-Scopes: - - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read,chat:write.customize - Access-Control-Expose-Headers: - - x-slack-req-id, retry-after - Access-Control-Allow-Origin: - - "*" - X-Slack-Backend: - - r - X-Content-Type-Options: - - nosniff - Expires: - - Mon, 26 Jul 1997 05:00:00 GMT - Cache-Control: - - private, no-cache, no-store, must-revalidate - X-Xss-Protection: - - '0' - X-Accepted-Oauth-Scopes: - - chat:write - Access-Control-Allow-Headers: - - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, - x-b3-sampled, x-b3-flags - Vary: - - Accept-Encoding - Pragma: - - no-cache - Strict-Transport-Security: - - max-age=31536000; includeSubDomains; preload - Referrer-Policy: - - no-referrer - Content-Length: - - '60' - Content-Type: - - application/json; charset=utf-8 - X-Via: - - haproxy-www-5fg6,haproxy-edge-pdx-9tv4 - body: - encoding: ASCII-8BIT - string: '{"ok":false,"error":"channel_not_found"}' - recorded_at: Fri, 09 Oct 2020 04:13:42 GMT + recorded_at: Fri, 09 Oct 2020 17:27:36 GMT - request: method: post uri: https://slack.com/api/chat.postMessage?channel=C01BKP7MWNB&icon_emoji=dog&text=hi&token=&username=woof @@ -528,11 +210,11 @@ http_interactions: message: OK headers: Date: - - Fri, 09 Oct 2020 04:13:43 GMT + - Fri, 09 Oct 2020 17:27:38 GMT Server: - Apache X-Slack-Req-Id: - - 81d7d140f7a12e2ca397c989033905df + - 13c10d8a03347cca39950b947bf92358 X-Oauth-Scopes: - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read,chat:write.customize Access-Control-Expose-Headers: @@ -567,136 +249,9 @@ http_interactions: Content-Type: - application/json; charset=utf-8 X-Via: - - haproxy-www-kot6,haproxy-edge-pdx-rqgu + - haproxy-www-iyt0,haproxy-edge-pdx-iofq body: encoding: ASCII-8BIT - string: '{"ok":true,"channel":"C01BKP7MWNB","ts":"1602216823.009900","message":{"type":"message","subtype":"bot_message","text":"hi","ts":"1602216823.009900","username":"woof","icons":{"emoji":"dog","image_64":"https:\/\/a.slack-edge.com\/80588\/img\/emoji_2017_12_06\/apple\/2b55.png"},"bot_id":"B01C94S0PMJ"}}' - recorded_at: Fri, 09 Oct 2020 04:13:43 GMT -- request: - method: post - uri: https://slack.com/api/chat.postMessage?channel=USLACKBOT&icon_emoji=&text=maracuyA&token=&username= - body: - encoding: UTF-8 - 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: - Date: - - Fri, 09 Oct 2020 04:13:45 GMT - Server: - - Apache - X-Slack-Req-Id: - - 8243011a1fdd0620af85db2dc042ab73 - X-Oauth-Scopes: - - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read,chat:write.customize - Access-Control-Expose-Headers: - - x-slack-req-id, retry-after - Access-Control-Allow-Origin: - - "*" - X-Slack-Backend: - - r - X-Content-Type-Options: - - nosniff - Expires: - - Mon, 26 Jul 1997 05:00:00 GMT - Cache-Control: - - private, no-cache, no-store, must-revalidate - X-Xss-Protection: - - '0' - X-Accepted-Oauth-Scopes: - - chat:write - Access-Control-Allow-Headers: - - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, - x-b3-sampled, x-b3-flags - Vary: - - Accept-Encoding - Pragma: - - no-cache - Strict-Transport-Security: - - max-age=31536000; includeSubDomains; preload - Referrer-Policy: - - no-referrer - Content-Length: - - '174' - Content-Type: - - application/json; charset=utf-8 - X-Via: - - haproxy-www-9bd2,haproxy-edge-pdx-xphl - body: - encoding: ASCII-8BIT - string: '{"ok":true,"channel":"D01BUMDABT9","ts":"1602216825.000100","message":{"type":"message","subtype":"bot_message","text":"maracuyA","ts":"1602216825.000100","username":"Fire - - Pauline - Slack CLI","bot_id":"B01C94S0PMJ"}}' - recorded_at: Fri, 09 Oct 2020 04:13:45 GMT -- request: - method: get - uri: https://slack.com/api/conversations.members?channel=D01BUMDABT9&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: - Date: - - Fri, 09 Oct 2020 04:13:45 GMT - Server: - - Apache - X-Slack-Req-Id: - - 8d019d8c000dddbc7592d968cb273b42 - X-Oauth-Scopes: - - users:read,channels:read,chat:write,incoming-webhook,groups:read,im:read,mpim:read,chat:write.customize - Access-Control-Expose-Headers: - - x-slack-req-id, retry-after - Access-Control-Allow-Origin: - - "*" - X-Slack-Backend: - - r - X-Content-Type-Options: - - nosniff - Expires: - - Mon, 26 Jul 1997 05:00:00 GMT - Cache-Control: - - private, no-cache, no-store, must-revalidate - X-Xss-Protection: - - '0' - X-Accepted-Oauth-Scopes: - - channels:read,groups:read,mpim:read,im:read,read - Access-Control-Allow-Headers: - - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, - x-b3-sampled, x-b3-flags - Vary: - - Accept-Encoding - Pragma: - - no-cache - Strict-Transport-Security: - - max-age=31536000; includeSubDomains; preload - Referrer-Policy: - - no-referrer - Content-Length: - - '60' - Content-Type: - - application/json; charset=utf-8 - X-Via: - - haproxy-www-xlhq,haproxy-edge-pdx-gxzc - body: - encoding: ASCII-8BIT - string: '{"ok":false,"error":"channel_not_found"}' - recorded_at: Fri, 09 Oct 2020 04:13:45 GMT + string: '{"ok":true,"channel":"C01BKP7MWNB","ts":"1602264458.000200","message":{"type":"message","subtype":"bot_message","text":"hi","ts":"1602264458.000200","username":"woof","icons":{"emoji":"dog","image_64":"https:\/\/a.slack-edge.com\/80588\/img\/emoji_2017_12_06\/apple\/2b55.png"},"bot_id":"B01C94S0PMJ"}}' + recorded_at: Fri, 09 Oct 2020 17:27:38 GMT recorded_with: VCR 6.0.0 diff --git a/test/recipient_test.rb b/test/recipient_test.rb index a68711ad..4ac3a1f1 100644 --- a/test/recipient_test.rb +++ b/test/recipient_test.rb @@ -13,20 +13,15 @@ describe 'send_message' do before do # slackbot will be in every slack workspace - @test = Recipient.new(slack_id: "USLACKBOT",name: "slackbot") + @test = Recipient.new(slack_id: "U01BKP7MGVD",name: "pauline.chane") end it 'returns message hash for successful messages for users' do VCR.use_cassette("send message to recipient") do message = "maracuyA" response = @test.send_message(message) - # verify correct channel - url = "https://slack.com/api/conversations.members" - query = {token: Recipient.token, channel: response['channel']} - channel_members = HTTParty.get(url, query: query) expect(response).must_be_instance_of Hash expect(response['message']['text']).must_equal message - # for DMs since this is to a DM with Slackbot - expect(channel_members['members']).must_include @test.slack_id + expect(response['channel']).must_equal "D01CD4P11J5" end end it 'returns message hash for successful messages for channels' do @@ -63,7 +58,6 @@ VCR.use_cassette("send_message_to_recipient") do channel = Recipient.new(slack_id: "C01BKP7MWNB",name: "random") response = channel.send_message("hi", emoji: "dog", send_as: "woof") - puts "hi" expect(response["message"]["username"]).must_equal "woof" expect(response["message"]["icons"]["emoji"]).must_equal "dog" end diff --git a/test/workspace_test.rb b/test/workspace_test.rb index 5746300a..a018d215 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -131,14 +131,10 @@ # select user to send message to @ws.select_user("slackbot") response = @ws.send_message("HEY LISTEN") - # verify correct channel - url = "https://slack.com/api/conversations.members" - query = {token: Recipient.token, channel: response['channel']} - channel_members = HTTParty.get(url, query: query) expect(response).must_be_instance_of Hash expect(response['message']['text']).must_equal "HEY LISTEN" # for DMs since this is to a DM with Slackbot - expect(channel_members['members']).must_include user.slack_id + expect(response['channel']).must_equal "D01BUMDABT9" end end end