diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 00000000..f09abbfe Binary files /dev/null and b/.DS_Store differ diff --git a/.gitignore b/.gitignore index 8d6a243f..d4edbe78 100644 --- a/.gitignore +++ b/.gitignore @@ -11,7 +11,7 @@ /tmp/ # Used by dotenv library to load environment variables. -# .env +.env ## Specific to RubyMotion: .dat* @@ -53,4 +53,8 @@ build-iPhoneSimulator/ .env # Ignore cassette files -/specs/cassettes/ +# /specs/cassettes/ +# /test/cassettes/ + +# Ignore my set-up test +/lib/set_up/ \ No newline at end of file diff --git a/lib/channel.rb b/lib/channel.rb new file mode 100644 index 00000000..7644c8ce --- /dev/null +++ b/lib/channel.rb @@ -0,0 +1,29 @@ +require_relative 'recipient' + +class Channel < Recipient + + attr_reader :topic, :member_count + + def initialize(name:, slack_id:, topic:, member_count:) + super(name: name, slack_id: slack_id) + + if topic.class != String + raise ArgumentError.new, "Wrong format for topic!" + end + @topic = topic + + if member_count.class != Integer + raise ArgumentError.new, "Wrong format for member count!" + end + @member_count = member_count + end + + def details + return "\n + Name: #{@name} + Topic: #{@topic} + Slack id: #{@slack_id} + Member count: #{@member_count}" + end + +end \ No newline at end of file diff --git a/lib/recipient.rb b/lib/recipient.rb new file mode 100644 index 00000000..10ba95a2 --- /dev/null +++ b/lib/recipient.rb @@ -0,0 +1,24 @@ +class Recipient + + attr_reader :name, :slack_id + + def initialize(name:, slack_id:) + + if name.class != String + raise ArgumentError.new, "wrong format for initiating name" + end + @name = name + + if slack_id.class != String + raise ArgumentError.new, "wrong format for initiating id" + end + @slack_id = slack_id + + end + + + def details + raise NotImplementedError.new "not implemented in recipient class" + end + +end diff --git a/lib/set_up.rb b/lib/set_up.rb new file mode 100644 index 00000000..78b86d29 --- /dev/null +++ b/lib/set_up.rb @@ -0,0 +1,25 @@ +# To get this to work properly, running it in ruby (ruby.set_up.rb) you must be in the general project folder NOT lib. Run it from the project folder. This is a specificity problem because the .env file doesn't live in Lib so ruby can't find it from here. + +# Run this in ruby as (ruby lib/set_up.rb) + +require 'httparty' +require 'pry' + +require 'dotenv' +Dotenv.load + +def set_up_test + + url = "https://slack.com/api/conversations.list" + + query_params = { + token: ENV["SLACK_TOKEN"] + } + + response = HTTParty.get(url, query: query_params) + + return response + +end + +puts set_up_test \ No newline at end of file diff --git a/lib/slack.rb b/lib/slack.rb index 960cf2f7..2e429692 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -1,11 +1,164 @@ #!/usr/bin/env ruby +require_relative 'workspace' +require 'pry' def main puts "Welcome to the Ada Slack CLI!" + + # Initializes a new workspace + workspace = Workspace.new + + #Ternary statement to add 's' for more than 1 user + puts "There are #{workspace.users.length} user(s) in your workplace." + + puts "There are #{workspace.channels.length} channel(s) in your workspace." + + main_menu(workspace) + + puts "Thank you for using the Ada Slack CLI" +end - # TODO project +def main_menu(workspace) + + loop_options = ["1. List users", "2. List channels", "3. Quit"] + puts "\nPlease select from one of the following options by choosing its corresponding number: " + loop_options.each do |option| + puts "\t #{option}" + end + + input = gets.chomp.downcase + eval = nil + until eval == "exit" + case input + when "1" + puts + puts "Here is a list of all users: " + all_users_details = [] + workspace.users.each do |user| + all_users_details << user.details + end + puts all_users_details + selected_user = make_a_selection(workspace) + if selected_user == nil + eval = nil + break + else + selected_info = display_selected(workspace, selected_user) + if selected_info == nil + break + else puts selected_info + end + input = nil + end + when "2" + puts + puts "Here is a list of all channels: " + all_channel_details = [] + workspace.channels.each do |channel| + all_channel_details << channel.details + end + puts all_channel_details + selected_channel = make_a_selection(workspace) + if selected_channel == nil + eval = nil + break + else + selected_info = display_selected(workspace, selected_channel) + if selected_info == nil + break + else puts selected_info + end + input = nil + end + when "3" + eval = "exit" + when "quit" + eval = "exit" + else + puts "\nPlease select from one of the following options by choosing its corresponding number: " + loop_options.each do |option| + puts "\t #{option}" + end + eval = nil + input = gets.chomp.downcase + end + + end + +end - puts "Thank you for using the Ada Slack CLI" +def make_a_selection(workspace) + print "\n You will be able to see details or send a message soon! Please select a user or channel by entering their corresponding name or Slack ID. If you'd like to exit, you may type \'QUIT\' to quit the program.: " + second_input = gets.chomp.downcase + + if second_input == "quit" + return nil + end + + selected = nil + + if workspace.all_user_names.include?(second_input) || workspace.all_user_slack_ids.include?(second_input) + puts "You selected the following user: #{second_input}.\n " + workspace.users.each do |possible_user| + if possible_user.name == second_input || possible_user.slack_id == second_input + selected = possible_user + end + end + return_statement = [selected, "user"] + return return_statement + + elsif workspace.all_channel_names.include?(second_input) || workspace.all_channel_slack_ids.include?(second_input) + puts "You selected the following channel: #{second_input}. \n" + workspace.channels.each do |possible_channel| + if possible_channel.name == second_input || possible_channel.slack_id == second_input + selected = possible_channel + end + end + return_statement = [selected, "channel"] + return return_statement + else + puts "You did not enter a valid user. We're going to quit." + return nil + end +end + +def display_selected(workspace, selection) + puts "\n What would you like to know? + \t * Details + \t * Send message + \t * Quit" + + third_input = gets.chomp.downcase + if third_input == "quit" + return nil + end + + selection_text = selection[0] + + if third_input == "details" + if selection[1] == "user" + return selection_text.details + elsif selection[1] == "channel" + return selection_text.details + end + elsif third_input == "send message" + success_of_messaging = sending_message(workspace, selection) + if success_of_messaging == true + puts "You successfully sent your message. Great" + else + puts "Your message did not send. Sorry." + end + end +end + +def sending_message(workspace, selection) + puts "What message do you want to send to #{selection[0].name}? \n Type it here: " + message = gets.chomp + + success_of_sending = workspace.api_message_send(message, selection[0]) + return success_of_sending + end + main if __FILE__ == $PROGRAM_NAME \ No newline at end of file diff --git a/lib/user.rb b/lib/user.rb new file mode 100644 index 00000000..ba49636c --- /dev/null +++ b/lib/user.rb @@ -0,0 +1,48 @@ +require_relative 'recipient' + +class User < Recipient + + attr_reader :real_name, :status_text, :status_emoji + + def initialize(name:, slack_id:, real_name:, status_text:, status_emoji:) + super(name: name, slack_id: slack_id) + + if real_name.class != String + raise ArgumentError.new, "Wrong format for real name initialization" + else + @real_name = real_name + end + + + if status_text.class != String + raise ArgumentError.new, "Wrong format for status initialization" + else + @status_text = status_text + end + + if status_emoji.class != String + raise ArgumentError.new, "Wrong format for emoji input" + elsif status_emoji.length == 0 + @status_emoji = status_emoji + elsif + status_emoji[0] != ":" || status_emoji[-1] != ":" + raise ArgumentError.new, "Wrong format for emoji input" + else + @status_emoji = status_emoji + end + + + + end + + def details + return " + Name: #{@name} + Slack id: #{@slack_id} + Status text: #{@status_text} + Status emoji: #{@status_emoji} + Real name: #{@real_name} + " + end + +end \ No newline at end of file diff --git a/lib/workspace.rb b/lib/workspace.rb new file mode 100644 index 00000000..aa437835 --- /dev/null +++ b/lib/workspace.rb @@ -0,0 +1,131 @@ +require 'httparty' +require_relative 'user' +require_relative 'channel' +require 'dotenv' +Dotenv.load + +require 'pry' + +class Workspace + + attr_reader :users, :channels + + def initialize + @users = [] + @channels = [] + + #method call to initiate calling API to populate users and channels to display the initial # of them + api_call_list_users + api_call_list_channels + end + + def api_call_list_channels + #This method takes in the entire listuser api + url = "https://slack.com/api/conversations.list" + api_key = ENV['SLACK_TOKEN'] + query_parameters = {"token" => api_key} + channel_response = HTTParty.get(url, query: query_parameters) + make_channels(channel_response) + return channel_response["ok"] == true + end + + def api_call_list_users + #This method takes in the entire listuser api + url = "https://slack.com/api/users.list" + api_key = ENV['SLACK_TOKEN'] + + query_parameters = {"token" => api_key} + + user_response = HTTParty.get(url, query: query_parameters) + + make_users(user_response) + + return user_response["ok"] == true + end + + def make_channels(response) + total_channels = response["channels"].length + i = 0 + until i == total_channels + channel_name = response["channels"][i]["name"] + channel_slack_id = response["channels"][i]["id"] + channel_topic = response["channels"][i]["topic"]["value"] + channel_member_count = response["channels"][i]["num_members"] + + new_channel = Channel.new(name: channel_name, slack_id: channel_slack_id, topic: channel_topic, member_count: channel_member_count) + + @channels << new_channel + + i += 1 + end + end + + def make_users(response) + total_users = response["members"].length + i = 0 + + until i == total_users + user_name = response["members"][i]["name"] + user_slack_id = response["members"][i]["id"] + user_real_name = response["members"][i]["real_name"] + user_status_text = response["members"][i]["profile"]["status_text"] + user_status_emoji = response["members"][i]["profile"]["status_emoji"] + + new_user = User.new(name: user_name, slack_id: user_slack_id, real_name: user_real_name, status_text: user_status_text, status_emoji: user_status_emoji) + @users << new_user + + i += 1 + end + end + + def all_channel_names + all_channel_names = [] + + channels.each do |channel| + all_channel_names << channel.name + end + return all_channel_names + end + + + def all_user_names + all_user_names = [] + + users.each do |user| + all_user_names << user.name + end + return all_user_names + end + + def all_channel_slack_ids + all_channel_slack_ids = [] + channels.each do |channel| + all_channel_slack_ids << channel.slack_id + end + end + + def all_user_slack_ids + all_user_slack_ids = [] + users.each do |user| + all_user_slack_ids << user.slack_id + end + return all_user_slack_ids + end + + def api_message_send(message, recipient) + url = "https://api.slack.com/api/chat.postMessage" + api_key = ENV['SLACK_TOKEN'] + text = message + + being_messaged = recipient.slack_id + query_parameters = {"token" => api_key, + "channel" => being_messaged, + "text" => text + } + + response = HTTParty.post(url, query: query_parameters) + + return response["ok"] == true + end + +end \ No newline at end of file diff --git a/test/cassettes/api_call_list_users.yml b/test/cassettes/api_call_list_users.yml new file mode 100644 index 00000000..3112967e --- /dev/null +++ b/test/cassettes/api_call_list_users.yml @@ -0,0 +1,300 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/users.list?token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '923' + Connection: + - keep-alive + Date: + - Sat, 14 Sep 2019 21:33:29 GMT + Server: + - Apache + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - aee34873-9b5f-4ad2-802d-e9b98f863efd + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write:bot + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - users:read + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-abbx + X-Cache: + - Miss from cloudfront + Via: + - 1.1 4c7c693b007dfce603c83f138e31bccb.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - ja-pnKc8Dyy_kBO1cKTrsXTj33nM8H7a1m2lfDh_fdyp7nNaXKTiPQ== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"TN69KNQ5N","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":null,"tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Slackbot","real_name_normalized":"Slackbot","display_name":"Slackbot","display_name_normalized":"Slackbot","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"sv41d8cd98f0","always_active":true,"first_name":"slackbot","last_name":"","image_24":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png","image_32":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png","image_192":"https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png","image_512":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png","status_text_canonical":"","team":"TN69KNQ5N"},"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":"UN69SPE21","team_id":"TN69KNQ5N","name":"vanessareigosa","deleted":false,"color":"9f69e7","real_name":"v","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"v","real_name_normalized":"v","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gd0d0c84e105","first_name":"v","last_name":"","image_24":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-512.png","status_text_canonical":"","team":"TN69KNQ5N"},"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":1568445059},{"id":"UN85M758X","team_id":"TN69KNQ5N","name":"gutierrez.clara.es","deleted":false,"color":"4bbe2e","real_name":"Clara","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Clara","real_name_normalized":"Clara","display_name":"Clara","display_name_normalized":"Clara","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g096e4481348","image_24":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-512.png","status_text_canonical":"","team":"TN69KNQ5N"},"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":1568072026,"has_2fa":false}],"cache_ts":1568496809,"response_metadata":{"next_cursor":""}}' + http_version: + recorded_at: Sat, 14 Sep 2019 21:33:27 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: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '598' + Connection: + - keep-alive + Date: + - Sat, 14 Sep 2019 21:33:29 GMT + Server: + - Apache + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - b107fce4-8465-475f-8adf-623f68c8acf5 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write:bot + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-8emn + X-Cache: + - Miss from cloudfront + Via: + - 1.1 814362d7589b223cc8927cc821d97136.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - oVybmbrL3xsHPwh-mwsbLmM_5rusfD6eTYMq4S5KAgX9BmIfiTsBUg== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channels":[{"id":"CN69KP124","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1568071958,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"UN69SPE21","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TN69KNQ5N"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"Non-work + banter and water cooler conversation","creator":"UN69SPE21","last_set":1568071958},"purpose":{"value":"A + place for non-work-related flimflam, faffing, hodge-podge or jibber-jabber + you''d prefer to keep out of more focused work-related channels.","creator":"UN69SPE21","last_set":1568071958},"previous_names":[],"num_members":2},{"id":"CN8FWJQJJ","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1568071958,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"UN69SPE21","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TN69KNQ5N"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"Company-wide + announcements and work-based matters","creator":"UN69SPE21","last_set":1568071958},"purpose":{"value":"This + channel is for workspace-wide communication and announcements. All members + are in this channel.","creator":"UN69SPE21","last_set":1568071958},"previous_names":[],"num_members":2},{"id":"CN8FWJZ6J","name":"api-project","is_channel":true,"is_group":false,"is_im":false,"created":1568071958,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"api-project","is_shared":false,"parent_conversation":null,"creator":"UN69SPE21","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TN69KNQ5N"],"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":"","creator":"","last_set":0},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' + http_version: + recorded_at: Sat, 14 Sep 2019 21:33:27 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: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '923' + Connection: + - keep-alive + Date: + - Sat, 14 Sep 2019 21:33:29 GMT + Server: + - Apache + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - 620f3967-aea9-4ca6-adc9-bfb135ad57ed + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write:bot + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - users:read + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-5f34 + X-Cache: + - Miss from cloudfront + Via: + - 1.1 d6a002c70d55f415107618b0750d493d.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - S7jgFqmg7dwMvX4HMkc9MIAVhjm7Wij8w3cIzcyA13Pl5Us7tgJ4KA== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"TN69KNQ5N","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":null,"tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Slackbot","real_name_normalized":"Slackbot","display_name":"Slackbot","display_name_normalized":"Slackbot","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"sv41d8cd98f0","always_active":true,"first_name":"slackbot","last_name":"","image_24":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png","image_32":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png","image_192":"https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png","image_512":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png","status_text_canonical":"","team":"TN69KNQ5N"},"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":"UN69SPE21","team_id":"TN69KNQ5N","name":"vanessareigosa","deleted":false,"color":"9f69e7","real_name":"v","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"v","real_name_normalized":"v","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gd0d0c84e105","first_name":"v","last_name":"","image_24":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-512.png","status_text_canonical":"","team":"TN69KNQ5N"},"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":1568445059},{"id":"UN85M758X","team_id":"TN69KNQ5N","name":"gutierrez.clara.es","deleted":false,"color":"4bbe2e","real_name":"Clara","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Clara","real_name_normalized":"Clara","display_name":"Clara","display_name_normalized":"Clara","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g096e4481348","image_24":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-512.png","status_text_canonical":"","team":"TN69KNQ5N"},"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":1568072026,"has_2fa":false}],"cache_ts":1568496809,"response_metadata":{"next_cursor":""}}' + http_version: + recorded_at: Sat, 14 Sep 2019 21:33:27 GMT +- request: + method: post + uri: https://api.slack.com/api/chat.postMessage?channel=UN85M758X&text=I%20am%20a%20test&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: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '169' + Connection: + - keep-alive + Date: + - Sat, 14 Sep 2019 23:14:08 GMT + Server: + - Apache + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - 3c59825f-bd56-4574-ac5c-0a52030ed881 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write:bot + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - chat:write:bot + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-d0g2 + X-Cache: + - Miss from cloudfront + Via: + - 1.1 3cd7af07832481c336aa1c93c9b4a6fe.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - cWHfS_FDPJsPegGAphHGogboiNOhMgG4mzOmF6TCwh5-21zdizzKLA== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channel":"DMZT2PKUH","ts":"1568502848.000100","message":{"type":"message","subtype":"bot_message","text":"I + am a test","ts":"1568502848.000100","username":"Slack API Project","bot_id":"BN47E0UAD"}}' + http_version: + recorded_at: Sat, 14 Sep 2019 23:14:07 GMT +recorded_with: VCR 5.0.0 diff --git a/test/cassettes/initialize.yml b/test/cassettes/initialize.yml new file mode 100644 index 00000000..bd9f4454 --- /dev/null +++ b/test/cassettes/initialize.yml @@ -0,0 +1,154 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/users.list?token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '923' + Connection: + - keep-alive + Date: + - Sat, 14 Sep 2019 21:33:30 GMT + Server: + - Apache + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - 6d23b16b-d3af-4d6f-82d3-e35e06987bbe + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write:bot + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - users:read + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-idv8 + X-Cache: + - Miss from cloudfront + Via: + - 1.1 7e87179efaa9e3c316bd3d3a74cfded8.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - oqe8_azlHcc49w53xPjq0ejI5uZW7OxpakXDEVZKONY4KcHsgSgIYw== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"TN69KNQ5N","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":null,"tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Slackbot","real_name_normalized":"Slackbot","display_name":"Slackbot","display_name_normalized":"Slackbot","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"sv41d8cd98f0","always_active":true,"first_name":"slackbot","last_name":"","image_24":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png","image_32":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png","image_192":"https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png","image_512":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png","status_text_canonical":"","team":"TN69KNQ5N"},"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":"UN69SPE21","team_id":"TN69KNQ5N","name":"vanessareigosa","deleted":false,"color":"9f69e7","real_name":"v","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"v","real_name_normalized":"v","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gd0d0c84e105","first_name":"v","last_name":"","image_24":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-512.png","status_text_canonical":"","team":"TN69KNQ5N"},"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":1568445059},{"id":"UN85M758X","team_id":"TN69KNQ5N","name":"gutierrez.clara.es","deleted":false,"color":"4bbe2e","real_name":"Clara","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Clara","real_name_normalized":"Clara","display_name":"Clara","display_name_normalized":"Clara","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g096e4481348","image_24":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-512.png","status_text_canonical":"","team":"TN69KNQ5N"},"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":1568072026,"has_2fa":false}],"cache_ts":1568496810,"response_metadata":{"next_cursor":""}}' + http_version: + recorded_at: Sat, 14 Sep 2019 21:33:28 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: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '598' + Connection: + - keep-alive + Date: + - Sat, 14 Sep 2019 21:33:30 GMT + Server: + - Apache + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - dff48b6d-0ff5-4747-885a-9943041d9394 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write:bot + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-89s6 + X-Cache: + - Miss from cloudfront + Via: + - 1.1 9046e5a276a05e60ee34c8475e92b8e7.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - KSdij_s_z8qbnFbYjVhMZLB1RHmJRYk0vJozo194NtQcpGDsU5feBw== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channels":[{"id":"CN69KP124","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1568071958,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"UN69SPE21","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TN69KNQ5N"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"Non-work + banter and water cooler conversation","creator":"UN69SPE21","last_set":1568071958},"purpose":{"value":"A + place for non-work-related flimflam, faffing, hodge-podge or jibber-jabber + you''d prefer to keep out of more focused work-related channels.","creator":"UN69SPE21","last_set":1568071958},"previous_names":[],"num_members":2},{"id":"CN8FWJQJJ","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1568071958,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"UN69SPE21","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TN69KNQ5N"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"Company-wide + announcements and work-based matters","creator":"UN69SPE21","last_set":1568071958},"purpose":{"value":"This + channel is for workspace-wide communication and announcements. All members + are in this channel.","creator":"UN69SPE21","last_set":1568071958},"previous_names":[],"num_members":2},{"id":"CN8FWJZ6J","name":"api-project","is_channel":true,"is_group":false,"is_im":false,"created":1568071958,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"api-project","is_shared":false,"parent_conversation":null,"creator":"UN69SPE21","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TN69KNQ5N"],"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":"","creator":"","last_set":0},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' + http_version: + recorded_at: Sat, 14 Sep 2019 21:33:28 GMT +recorded_with: VCR 5.0.0 diff --git a/test/cassettes/make_channels.yml b/test/cassettes/make_channels.yml new file mode 100644 index 00000000..b24b37e3 --- /dev/null +++ b/test/cassettes/make_channels.yml @@ -0,0 +1,154 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/users.list?token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '923' + Connection: + - keep-alive + Date: + - Sat, 14 Sep 2019 21:33:29 GMT + Server: + - Apache + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - 800277bb-e198-4413-ae88-776c1f31dee9 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write:bot + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - users:read + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-lblo + X-Cache: + - Miss from cloudfront + Via: + - 1.1 9046e5a276a05e60ee34c8475e92b8e7.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - Tk3DDx-c9K5PJGpR_MnstwFdSrtalekTFPFz0aEMB7DuXGycSlsBKg== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"TN69KNQ5N","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":null,"tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Slackbot","real_name_normalized":"Slackbot","display_name":"Slackbot","display_name_normalized":"Slackbot","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"sv41d8cd98f0","always_active":true,"first_name":"slackbot","last_name":"","image_24":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png","image_32":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png","image_192":"https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png","image_512":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png","status_text_canonical":"","team":"TN69KNQ5N"},"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":"UN69SPE21","team_id":"TN69KNQ5N","name":"vanessareigosa","deleted":false,"color":"9f69e7","real_name":"v","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"v","real_name_normalized":"v","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gd0d0c84e105","first_name":"v","last_name":"","image_24":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-512.png","status_text_canonical":"","team":"TN69KNQ5N"},"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":1568445059},{"id":"UN85M758X","team_id":"TN69KNQ5N","name":"gutierrez.clara.es","deleted":false,"color":"4bbe2e","real_name":"Clara","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Clara","real_name_normalized":"Clara","display_name":"Clara","display_name_normalized":"Clara","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g096e4481348","image_24":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-512.png","status_text_canonical":"","team":"TN69KNQ5N"},"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":1568072026,"has_2fa":false}],"cache_ts":1568496809,"response_metadata":{"next_cursor":""}}' + http_version: + recorded_at: Sat, 14 Sep 2019 21:33:27 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: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '598' + Connection: + - keep-alive + Date: + - Sat, 14 Sep 2019 21:33:29 GMT + Server: + - Apache + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - 023f8b17-bca0-4462-ab5d-f3c4acfd1d70 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write:bot + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-x8wy + X-Cache: + - Miss from cloudfront + Via: + - 1.1 36810aa1793ee589dc8c194860296079.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - rJrddVPev_2xaK5eVy8nmTbpFKwSo5Q9C192DLStZz9g8qCmIRoVCg== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channels":[{"id":"CN69KP124","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1568071958,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"UN69SPE21","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TN69KNQ5N"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"Non-work + banter and water cooler conversation","creator":"UN69SPE21","last_set":1568071958},"purpose":{"value":"A + place for non-work-related flimflam, faffing, hodge-podge or jibber-jabber + you''d prefer to keep out of more focused work-related channels.","creator":"UN69SPE21","last_set":1568071958},"previous_names":[],"num_members":2},{"id":"CN8FWJQJJ","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1568071958,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"UN69SPE21","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TN69KNQ5N"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"Company-wide + announcements and work-based matters","creator":"UN69SPE21","last_set":1568071958},"purpose":{"value":"This + channel is for workspace-wide communication and announcements. All members + are in this channel.","creator":"UN69SPE21","last_set":1568071958},"previous_names":[],"num_members":2},{"id":"CN8FWJZ6J","name":"api-project","is_channel":true,"is_group":false,"is_im":false,"created":1568071958,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"api-project","is_shared":false,"parent_conversation":null,"creator":"UN69SPE21","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TN69KNQ5N"],"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":"","creator":"","last_set":0},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' + http_version: + recorded_at: Sat, 14 Sep 2019 21:33:27 GMT +recorded_with: VCR 5.0.0 diff --git a/test/cassettes/make_users.yml b/test/cassettes/make_users.yml new file mode 100644 index 00000000..726379ca --- /dev/null +++ b/test/cassettes/make_users.yml @@ -0,0 +1,154 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/users.list?token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '923' + Connection: + - keep-alive + Date: + - Sat, 14 Sep 2019 21:33:30 GMT + Server: + - Apache + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - 155f66b1-3562-457a-a5ab-8abaa23bd390 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write:bot + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - users:read + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-vnia + X-Cache: + - Miss from cloudfront + Via: + - 1.1 97d744cbc5fa647cc362d14ff20ecf08.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - pu7XEhYoLtCgIUYj3W20NLhsTzs5_dbL36N9_H-givtkXq_cXFPvlQ== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"TN69KNQ5N","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":null,"tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Slackbot","real_name_normalized":"Slackbot","display_name":"Slackbot","display_name_normalized":"Slackbot","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"sv41d8cd98f0","always_active":true,"first_name":"slackbot","last_name":"","image_24":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png","image_32":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png","image_192":"https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png","image_512":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png","status_text_canonical":"","team":"TN69KNQ5N"},"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":"UN69SPE21","team_id":"TN69KNQ5N","name":"vanessareigosa","deleted":false,"color":"9f69e7","real_name":"v","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"v","real_name_normalized":"v","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gd0d0c84e105","first_name":"v","last_name":"","image_24":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-512.png","status_text_canonical":"","team":"TN69KNQ5N"},"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":1568445059},{"id":"UN85M758X","team_id":"TN69KNQ5N","name":"gutierrez.clara.es","deleted":false,"color":"4bbe2e","real_name":"Clara","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Clara","real_name_normalized":"Clara","display_name":"Clara","display_name_normalized":"Clara","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g096e4481348","image_24":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-512.png","status_text_canonical":"","team":"TN69KNQ5N"},"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":1568072026,"has_2fa":false}],"cache_ts":1568496810,"response_metadata":{"next_cursor":""}}' + http_version: + recorded_at: Sat, 14 Sep 2019 21:33:27 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: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '598' + Connection: + - keep-alive + Date: + - Sat, 14 Sep 2019 21:33:30 GMT + Server: + - Apache + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - c60c3635-526b-418a-badb-3e5358342102 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write:bot + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-5he4 + X-Cache: + - Miss from cloudfront + Via: + - 1.1 ee8246c5442dace7525c74f6a799bb47.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - muO7R0G6bBdSDBA0AdWsZgBL_RwHpgiVxGvpwXHXB8s8_k6MOZYIoA== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channels":[{"id":"CN69KP124","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1568071958,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"UN69SPE21","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TN69KNQ5N"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"Non-work + banter and water cooler conversation","creator":"UN69SPE21","last_set":1568071958},"purpose":{"value":"A + place for non-work-related flimflam, faffing, hodge-podge or jibber-jabber + you''d prefer to keep out of more focused work-related channels.","creator":"UN69SPE21","last_set":1568071958},"previous_names":[],"num_members":2},{"id":"CN8FWJQJJ","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1568071958,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"UN69SPE21","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TN69KNQ5N"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"Company-wide + announcements and work-based matters","creator":"UN69SPE21","last_set":1568071958},"purpose":{"value":"This + channel is for workspace-wide communication and announcements. All members + are in this channel.","creator":"UN69SPE21","last_set":1568071958},"previous_names":[],"num_members":2},{"id":"CN8FWJZ6J","name":"api-project","is_channel":true,"is_group":false,"is_im":false,"created":1568071958,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"api-project","is_shared":false,"parent_conversation":null,"creator":"UN69SPE21","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TN69KNQ5N"],"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":"","creator":"","last_set":0},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' + http_version: + recorded_at: Sat, 14 Sep 2019 21:33:28 GMT +recorded_with: VCR 5.0.0 diff --git a/test/cassettes/slack_info.yml b/test/cassettes/slack_info.yml new file mode 100644 index 00000000..67c13904 --- /dev/null +++ b/test/cassettes/slack_info.yml @@ -0,0 +1,154 @@ +--- +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: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '598' + Connection: + - keep-alive + Date: + - Thu, 12 Sep 2019 22:43:19 GMT + Server: + - Apache + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - 873c1b9f-7002-4c83-b379-51b93748209a + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write:bot + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-djyg + X-Cache: + - Miss from cloudfront + Via: + - 1.1 68eedbdfabd017beabf28d04341fec21.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C1 + X-Amz-Cf-Id: + - _m1_hbUVpWn8hbuKXQEoQ6l9QGRX-G_MUNO0qJCTpX7ocFKPdbeZKw== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channels":[{"id":"CN69KP124","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1568071958,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"UN69SPE21","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TN69KNQ5N"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"Non-work + banter and water cooler conversation","creator":"UN69SPE21","last_set":1568071958},"purpose":{"value":"A + place for non-work-related flimflam, faffing, hodge-podge or jibber-jabber + you''d prefer to keep out of more focused work-related channels.","creator":"UN69SPE21","last_set":1568071958},"previous_names":[],"num_members":2},{"id":"CN8FWJQJJ","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1568071958,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"UN69SPE21","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TN69KNQ5N"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"Company-wide + announcements and work-based matters","creator":"UN69SPE21","last_set":1568071958},"purpose":{"value":"This + channel is for workspace-wide communication and announcements. All members + are in this channel.","creator":"UN69SPE21","last_set":1568071958},"previous_names":[],"num_members":2},{"id":"CN8FWJZ6J","name":"api-project","is_channel":true,"is_group":false,"is_im":false,"created":1568071958,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"api-project","is_shared":false,"parent_conversation":null,"creator":"UN69SPE21","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TN69KNQ5N"],"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":"","creator":"","last_set":0},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' + http_version: + recorded_at: Thu, 12 Sep 2019 22:43:17 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: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '921' + Connection: + - keep-alive + Date: + - Thu, 12 Sep 2019 23:04:29 GMT + Server: + - Apache + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - 6090e9a3-a797-4ba8-bfba-f0fb9a7cfbe2 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write:bot + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - users:read + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-7x6t + X-Cache: + - Miss from cloudfront + Via: + - 1.1 0a2ce08fa1ec3c33302a7547d3305978.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C1 + X-Amz-Cf-Id: + - 3Hthot-Z57oyO8lDjQZl1xF3jPhY6K2_SY0NhNc3WW4Mw_XCe4e9fA== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"TN69KNQ5N","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":null,"tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Slackbot","real_name_normalized":"Slackbot","display_name":"Slackbot","display_name_normalized":"Slackbot","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"sv41d8cd98f0","always_active":true,"first_name":"slackbot","last_name":"","image_24":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png","image_32":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png","image_192":"https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png","image_512":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png","status_text_canonical":"","team":"TN69KNQ5N"},"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":"UN69SPE21","team_id":"TN69KNQ5N","name":"vanessareigosa","deleted":false,"color":"9f69e7","real_name":"v","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"v","real_name_normalized":"v","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gd0d0c84e105","first_name":"v","last_name":"","image_24":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-512.png","status_text_canonical":"","team":"TN69KNQ5N"},"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":1568072074},{"id":"UN85M758X","team_id":"TN69KNQ5N","name":"gutierrez.clara.es","deleted":false,"color":"4bbe2e","real_name":"Clara","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Clara","real_name_normalized":"Clara","display_name":"Clara","display_name_normalized":"Clara","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g096e4481348","image_24":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-512.png","status_text_canonical":"","team":"TN69KNQ5N"},"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":1568072026,"has_2fa":false}],"cache_ts":1568329469,"response_metadata":{"next_cursor":""}}' + http_version: + recorded_at: Thu, 12 Sep 2019 23:04:27 GMT +recorded_with: VCR 5.0.0 diff --git a/test/channel_test.rb b/test/channel_test.rb new file mode 100644 index 00000000..c47c1652 --- /dev/null +++ b/test/channel_test.rb @@ -0,0 +1,54 @@ +require_relative 'test_helper' + +describe "instances of channel initiate " do + before do + @test_name = "Awesome" + @test_slack_id = "luckynumber13" + @test_topic = "Awesome existence" + @test_member_count = 9 + end + + it "verifies that attempting to initialize an instance of Channel without appropriate data throws an ArgumentError" do + integer_name = 00132 + expect{ + @test_channel = Channel.new(name: integer_name, slack_id: @test_slack_id, topic: @test_topic, member_count: @test_member_count) + }.must_raise ArgumentError + + integer_slack_id = 13 + expect{ + @test_channel = Channel.new(name: @test_name, slack_id: integer_slack_id, topic: @test_topic, member_count: @test_member_count) + }.must_raise ArgumentError + + array_topic = ["awesome", "pawsome"] + expect{ + @test_channel = Channel.new(name: @test_name, slack_id: @test_slack_id, topic: array_topic , member_count: @test_member_count) + }.must_raise ArgumentError + + string_member_count = "99443" + expect{ + @test_channel = Channel.new(name: @test_name, slack_id: @test_slack_id, topic: @test_topic, member_count: string_member_count) + }.must_raise ArgumentError + end +end + +describe "instances of channel initiate properly using manually passed in data" do + + before do + @test_name = "Awesome" + @test_slack_id = "3456713" + @test_topic = "Awesome existence" + @test_member_count = 9 + + @test_channel = Channel.new(name: @test_name, slack_id: @test_slack_id, topic: @test_topic, member_count: @test_member_count) + end + + it "verify initialization of Channel" do + + expect(@test_channel).must_be_kind_of Channel + expect(@test_channel.name).must_equal @test_name + expect(@test_channel.slack_id).must_equal @test_slack_id + expect(@test_channel.topic).must_equal @test_topic + expect(@test_channel.member_count).must_equal @test_member_count + + end +end \ No newline at end of file diff --git a/test/recipient_test.rb b/test/recipient_test.rb new file mode 100644 index 00000000..4de0e51d --- /dev/null +++ b/test/recipient_test.rb @@ -0,0 +1,40 @@ +require_relative 'test_helper' + +# describe "recipient attributes and behaviors" do + +describe "recipient attribues" do + before do + @test_name = "awesome" + @test_slack_id = "0001" + @test_recipient = Recipient.new(name: @test_name, slack_id: @test_slack_id) + end + it "knows it's an instance of recipient" do + expect(@test_recipient).must_be_kind_of Recipient + end + + it "knows its slack_id" do + expect(@test_recipient.slack_id).must_equal @test_slack_id + end + + it "knows its name" do + expect(@test_recipient.name).must_equal @test_name + end + +end + +describe "recipient blocks initialization if incorrect format" do + it "allows initialization with name and id as instances of string to match API" do + VCR.use_cassette("slack_info") do + expect{@test_recipient = Recipient.new(name: "0001", id: 15.999)}.must_raise ArgumentError + expect{@test_recipient = Recipient.new(name: 0001, id: "15.999")}.must_raise ArgumentError + end + end + +end + +describe "fleshed-out methods of being able to provide a detailed summary" do + it "does not implement a details method" do + detail_free_recipient = Recipient.new(name: "silly", slack_id: "666") + expect{detail_free_recipient.details}.must_raise NotImplementedError + end +end diff --git a/test/slack_test.rb b/test/slack_test.rb new file mode 100644 index 00000000..7bbcd6eb --- /dev/null +++ b/test/slack_test.rb @@ -0,0 +1,18 @@ +require_relative 'test_helper' + +describe "slack attributes and behaviors" do + + it "main displays for the user the number of users available" do + + #No test for display :/ + end + + it "main displays for the user the number of channels available" do + #No test for display :/ + end + + it "main displays for the user possible interactions a person can have" do + #No test for display :/ + end + +end \ No newline at end of file diff --git a/test/test_helper.rb b/test/test_helper.rb index 90aeb408..72b05dab 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -1,17 +1,35 @@ require 'simplecov' SimpleCov.start do add_filter 'test/' + add_filter 'lib/slack' end require 'minitest' require 'minitest/autorun' +require 'awesome_print' require 'minitest/reporters' require 'minitest/skip_dsl' require 'vcr' +require 'dotenv' + +Dotenv.load Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new VCR.configure do |config| config.cassette_library_dir = "test/cassettes" config.hook_into :webmock + config.default_cassette_options = { + record: :new_episodes, # record new data when we don't have it + } + + config.filter_sensitive_data "" do + ENV["SLACK_TOKEN"] + end end + +require_relative '../lib/channel' +require_relative '../lib/recipient' +require_relative '../lib/user' +require_relative '../lib/workspace' +require_relative '../lib/slack' \ No newline at end of file diff --git a/test/user_test.rb b/test/user_test.rb new file mode 100644 index 00000000..5f20b68e --- /dev/null +++ b/test/user_test.rb @@ -0,0 +1,96 @@ +require_relative 'test_helper' + +describe "instances of user initiate " do + + before do + @test_name = "Awesome" + @test_id = "luckynumber13" + @test_real_name = "Hella Awesome" + @test_status_text = "Bein Awesome" + @test_emoji = ":sunglasses:" + end + + it "verifies that attempting to initialize an instance of User without appropriate data throws an ArgumentError" do + integer_test_name = 00132 + expect { @test_user = User.new(name: integer_test_name, slack_id: @test_id, real_name: @test_real_name, status_text: @test_status_text, status_emoji: @test_emoji) }.must_raise ArgumentError + + integer_slack_id = 13 + expect{ + @test_user = User.new(name: @test_name, slack_id: integer_slack_id, real_name: @test_real_name, status_text: @test_status_text, status_emoji: @test_emoji) + }.must_raise ArgumentError + + array_real_name = ["awesome", "pawsome"] + expect{ + @test_user = User.new(name: @test_name, slack_id: @test_id, real_name: array_real_name, status_text: @test_status_text, status_emoji: @test_emoji) + }.must_raise ArgumentError + + integer_status_text = 99443 + expect{ + @test_user = User.new(name: @test_name, slack_id: @test_id, real_name: @test_real_name, status_text: integer_status_text, status_emoji: @test_emoji) + }.must_raise ArgumentError + + stringy_emoji = "sunglasses" + expect{ + @test_user = User.new(name: @test_name, slack_id: @test_id, real_name: @test_real_name, status_text: @test_status_text, status_emoji: stringy_emoji) + }.must_raise ArgumentError + + stringy_emoji = 32978234 + expect{ + @test_user = User.new(name: @test_name, slack_id: @test_id, real_name: @test_real_name, status_text: @test_status_text, status_emoji: stringy_emoji) + }.must_raise ArgumentError + end +end + +describe "instances of user initiate " do + before do + @test_name = "Awesome" + @test_id = "luckynumber13" + @test_real_name = "Hella Awesome" + @test_status_text = "Bein Awesome" + @test_emoji = ":sunglasses:" + end + + it "verify initialization of User with accurate information" do + + @test_user = User.new(name: @test_name, slack_id: @test_id, real_name: @test_real_name, status_text: @test_status_text, status_emoji: @test_emoji) + + expect(@test_user).must_be_kind_of User + expect(@test_user.name).must_equal @test_name + expect(@test_user.slack_id).must_equal @test_id + expect(@test_user.real_name).must_equal @test_real_name + expect(@test_user.status_text).must_equal @test_status_text + expect(@test_user.status_emoji).must_equal @test_emoji + + end + +end + +describe "fleshed-out methods of being able to provide a detailed summary" do + + before do + @test_name = "Awesome" + @test_id = "luckynumber13" + @test_real_name = "Hella Awesome" + @test_status_text = "Bein Awesome" + @test_emoji = ":sunglasses:" + + @test_user = User.new(name: @test_name, slack_id: @test_id, real_name: @test_real_name, status_text: @test_status_text, status_emoji: @test_emoji) + end + it "verifies the type of return provided by details" do + + detail_statement = @test_user.details + + expect(detail_statement).must_be_kind_of String + expect(detail_statement).must_include(@test_name) + expect(detail_statement).must_include(@test_id) + expect(detail_statement).must_include(@test_real_name) + expect(detail_statement).must_include(@test_status_text) + expect(detail_statement).must_include(@test_emoji) + end + +end + + + + + diff --git a/test/workspace_test.rb b/test/workspace_test.rb new file mode 100644 index 00000000..6953d262 --- /dev/null +++ b/test/workspace_test.rb @@ -0,0 +1,103 @@ +require_relative 'test_helper' + +describe 'workplace class' do + + describe "workplace attributes" do + it "recognizes that it's an instance of Workspace" do + VCR.use_cassette("initialize") do + @test_workspace = Workspace.new + + expect(@test_workspace).must_be_kind_of Workspace + expect(@test_workspace.users).must_be_kind_of Array + expect(@test_workspace.channels).must_be_kind_of Array + end + end + end +end + +describe "workplace behavior in talking to Slack API" do + it "will call Slack API succesfully" do + VCR.use_cassette("api_call_list_users") do + @test_workspace = Workspace.new + expect(@test_workspace.api_call_list_users).must_equal true + end + end +end + +describe "make_users" do + it "parses user API accurately into new User objects" do + VCR.use_cassette("make_users") do + @test_workspace = Workspace.new + user = @test_workspace.users[0] + expect(user).must_be_kind_of User + end + end +end + +describe "make_channels" do + it "parases channel API accurately into new Channel objects" do + VCR.use_cassette("make_channels") do + @test_workspace = Workspace.new + channel = @test_workspace.channels[0] + expect(channel).must_be_kind_of Channel + end + end +end + + +describe "make summaries of users and channels for slack.rb to use" do + before do + VCR.use_cassette("make_channels") do + @test_workspace = Workspace.new + end + end + + it "all_user_names compiles names of all users" do + expected_number_of_users_postman = 3 + expected_first_user_postman = "slackbot" + expect(@test_workspace.all_user_names).must_be_kind_of Array + expect(@test_workspace.all_user_names.length).must_equal expected_number_of_users_postman + expect(@test_workspace.all_user_names[0]).must_equal expected_first_user_postman + end + + it "all_channel_names compiles names of all channels" do + expected_number_of_channels_postman = 3 + expected_first_channel_postman = "random" + + expect(@test_workspace.all_channel_names).must_be_kind_of Array + expect(@test_workspace.all_channel_names.length).must_equal expected_number_of_channels_postman + expect(@test_workspace.all_channel_names[0]).must_equal expected_first_channel_postman + end + + it "all_user_names compiles slack_ids of all users" do + expected_number_of_users_postman = 3 + expected_first_user_id_postman = "USLACKBOT" + + expect(@test_workspace.all_user_slack_ids).must_be_kind_of Array + expect(@test_workspace.all_user_slack_ids.length).must_equal expected_number_of_users_postman + expect(@test_workspace.all_user_slack_ids[0]).must_equal expected_first_user_id_postman + end + + it "all_user_names compiles slack_ids of all channels" do + expected_number_of_channels_postman = 3 + expected_first_channel_id_postman = "CN69KP124" + + expect(@test_workspace.all_channel_slack_ids).must_be_kind_of Array + expect(@test_workspace.all_channel_slack_ids.length).must_equal expected_number_of_channels_postman + expect(@test_workspace.all_channel_slack_ids[0].slack_id).must_equal expected_first_channel_id_postman + end + +end + +describe "workplace successfully calls Slack API to send a message to Slack API" do + + it "verifies that a message was successfully sent to Slack API" do + VCR.use_cassette("api_call_list_users") do + @test_workspace = Workspace.new + test_recipient_of_message = @test_workspace.users[2] + + expect(@test_workspace.api_message_send("I am a test", test_recipient_of_message)).must_equal true + + end + end +end \ No newline at end of file