From fb42bfd8ace70054570f860d821081d0f6ec4ff2 Mon Sep 17 00:00:00 2001 From: Sharon Cheung Date: Sat, 14 Mar 2020 13:33:49 -0700 Subject: [PATCH 01/25] inital set up & added user.list_all --- lib/channel.rb | 37 ++++++++++++++++++++++++++ lib/recipient.rb | 48 +++++++++++++++++++++++++++++++++ lib/slack.rb | 64 ++++++++++++++++++++++++++++++++++++++++---- lib/user.rb | 44 ++++++++++++++++++++++++++++++ lib/workspace.rb | 65 +++++++++++++++++++++++++++++++++++++++++++++ test/test_helper.rb | 7 +++++ 6 files changed, 260 insertions(+), 5 deletions(-) create mode 100644 lib/channel.rb create mode 100644 lib/recipient.rb create mode 100644 lib/user.rb create mode 100644 lib/workspace.rb diff --git a/lib/channel.rb b/lib/channel.rb new file mode 100644 index 00000000..7d800a72 --- /dev/null +++ b/lib/channel.rb @@ -0,0 +1,37 @@ +require "httparty" +require "dotenv" +require 'json' + +Dotenv.load + + +class Channel < Recipient + + attr_reader :topic, :memeber_count + + def initialize(topic:, memeber_count:, name:, slack_id:) + @topic = topic + @memeber_count = memeber_count + end + +=begin + def self.list_all + data = User.get("https://slack.com/api/users.list") + index = 0 + + users = [] + + data["members"].each do |user| + users << User.new( + name: user["name"], + slack_id: user["id"], + real_name: user["real_name"], + status_text: user["profile"]["status_text"], + status_emoji: user["profile"]["status_emoji"]) + end + return users + end +=end + end + +end \ No newline at end of file diff --git a/lib/recipient.rb b/lib/recipient.rb new file mode 100644 index 00000000..924d2510 --- /dev/null +++ b/lib/recipient.rb @@ -0,0 +1,48 @@ +require "httparty" +require "dotenv" + + +Dotenv.load + +BASE_URL = "https://slack.com/api/" +API_KEY = ENV["SLACK_API_TOKEN"] +USER_URL = "#{BASE_URL}/users.list" +CHANNEL_URL = "#{BASE_URL}/conversations.list" + + +class Recipient + +attr_reader :slack_id, :name + + def initialize(slack_id:, name:) + @slack_id = slack_id + @name = name + end + + + def details + raise NotImplementedError, "Define this method in a child class" + end + + def send_message(message) + + end + + def self.get(url) + data = HTTParty.get(url, query: { token: ENV["SLACK_API_TOKEN"]}) + + #check for errors + if data.code != 200 || data["ok"] == false + raise SlackAPIError, "We encounter a problem: #{data["error"]}" + end + + return data + end + + def self.list_all + raise NotImplementedError, "Define this method in a child class" + end +end + +class SlackAPIError < Exception +end diff --git a/lib/slack.rb b/lib/slack.rb index 8a0b659b..a63ece59 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -1,12 +1,66 @@ #!/usr/bin/env ruby +require_relative 'workspace' def main - puts "Welcome to the Ada Slack CLI!" - workspace = Workspace.new + workspace = Workspace.new + puts "\n" + puts "Welcome to the Ada Slack CLI! This Slack workspace currently has #{workspace.users.count} users and #{workspace.channels.count} channels." - # TODO project + user_input = prompt_for_input - puts "Thank you for using the Ada Slack CLI" + until user_input == "quit" || user_input == "exit" + + case user_input + when "list users" + tp workspace.users, "slack_id", "name", "real_name" + puts "\n" + + when "list channels" + tp workspace.channels, "name", "topic", "member_count", "slack_id" + puts "\n" + + when "select user" + print "Please enter the user name or ID: " + puts workspace.select_user + puts "\n" + + when "select channel" + print "Please enter the channel name or ID: " + puts workspace.select_channel + puts "\n" + + when "details" + if workspace.selected == nil + puts "Please select a user or channel." + puts "\n" + else + workspace.show_details + user_input = nil + puts "\n" + end + when "send message" + if workspace.selected == nil + puts "Please select a user or channel." + puts "\n" + else + print "Please enter your message: " + workspace.send_message + puts "\n" + end + else + puts "Sorry, I didn't understand your request. Please try again." + puts "\n" + end + + user_input = prompt_for_input + end + puts "Thank you for using the ADA Slack CLI!" + puts "\n" +end + +def prompt_for_input + print "Please choose an option: list users, list channels, select user, select channel, details, send message, or quit: \n" + return gets.chomp.downcase end -main if __FILE__ == $PROGRAM_NAME \ No newline at end of file +main if __FILE__ == $PROGRAM_NAME diff --git a/lib/user.rb b/lib/user.rb new file mode 100644 index 00000000..e1d1b9c0 --- /dev/null +++ b/lib/user.rb @@ -0,0 +1,44 @@ +require "httparty" +require "dotenv" +require 'json' +require_relative "recipient" + +Dotenv.load + +class User < Recipient + + attr_reader :real_name, :status_text, :status_emoji + + def initialize(real_name: , status_text: , status_emoji: , name: , slack_id: ) + super(slack_id: slack_id, name: name) + + @real_name = real_name + @status_text = status_text + @status_emoji = status_emoji + + end + + def detail + tp self, "slack_id", "name", "real_name" + end + + def self.list_all + data = User.get("https://slack.com/api/users.list") + index = 0 + + users = [] + + data["members"].each do |user| + users << User.new( + name: user["name"], + slack_id: user["id"], + real_name: user["real_name"], + status_text: user["profile"]["status_text"], + status_emoji: user["profile"]["status_emoji"]) + end + return users + + end + +end + diff --git a/lib/workspace.rb b/lib/workspace.rb new file mode 100644 index 00000000..6e47042d --- /dev/null +++ b/lib/workspace.rb @@ -0,0 +1,65 @@ +require "httparty" +require "dotenv" +require 'json' +require_relative "user" +require_relative "channel" + +Dotenv.load + +BASE_URL = "https://slack.com/api/" +API_KEY = ENV["SLACK_API_TOKEN"] +USER_URL = "#{BASE_URL}/users.list" +CHANNEL_URL = "#{BASE_URL}/conversations.list" + + +class Workspace + + attr_reader :channels, :users, :selected + + def initialize + @channels = [] + @users = [] + @selected = "" + end + + def select_channel + end + + def select_user + end + + def show_details + end + + def send_message + end + +=begin + def create_users + query = { + token: API_KEY + } + puts API_KEY + resp = HTTParty.get(USER_URL, query: query) + index = 0 + resp.parsed_response["members"].each do |user| + @users[index] = User.new(user["profile"]["real_name"], user["profile"]["status_text"], user["profile"]["status_emoji"]) + index += 1 + end + end + + def create_channels + query = { + token: API_KEY + } + puts API_KEY + resp = HTTParty.get(CHANNEL_URL, query: query) + index = 0 + resp.parsed_response["channels"].each do |channel| + @channels[index] = User.new(channel["name"], channel["topic"]["value"], channel["num_members"]) + index += 1 + end + end +=end + +end \ No newline at end of file diff --git a/test/test_helper.rb b/test/test_helper.rb index 1fcf2bab..325198fc 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -25,5 +25,12 @@ } # Don't leave our token lying around in a cassette file. + config.filter_sensitive_data("") do + ENV['SLACK_API_TOKEN'] + end + + config.filter_sensitive_data("") do + ENV['BOT_TOKEN'] + end end From 34c8bf4a44b9781c528684084ca75a1846757b33 Mon Sep 17 00:00:00 2001 From: Sharon Cheung Date: Sat, 14 Mar 2020 14:57:19 -0700 Subject: [PATCH 02/25] added channel list_all method --- lib/channel.rb | 26 +++++++++++--------------- lib/workspace.rb | 28 ---------------------------- 2 files changed, 11 insertions(+), 43 deletions(-) diff --git a/lib/channel.rb b/lib/channel.rb index 7d800a72..61c4933d 100644 --- a/lib/channel.rb +++ b/lib/channel.rb @@ -1,6 +1,7 @@ require "httparty" require "dotenv" require 'json' +require_relative "recipient" Dotenv.load @@ -10,28 +11,23 @@ class Channel < Recipient attr_reader :topic, :memeber_count def initialize(topic:, memeber_count:, name:, slack_id:) + super(slack_id: slack_id, name: name) @topic = topic @memeber_count = memeber_count end -=begin def self.list_all - data = User.get("https://slack.com/api/users.list") - index = 0 + data = Channel.get("https://slack.com/api/conversations.list") - users = [] + channels = [] - data["members"].each do |user| - users << User.new( - name: user["name"], - slack_id: user["id"], - real_name: user["real_name"], - status_text: user["profile"]["status_text"], - status_emoji: user["profile"]["status_emoji"]) + data["channels"].each do |channel| + channels << Channel.new( + name: channel["name"], + slack_id: channel["id"], + topic: channel["topic"]["value"], + memeber_count: channel["num_members"]) end - return users + return channels end -=end - end - end \ No newline at end of file diff --git a/lib/workspace.rb b/lib/workspace.rb index 6e47042d..1c39a123 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -34,32 +34,4 @@ def show_details def send_message end -=begin - def create_users - query = { - token: API_KEY - } - puts API_KEY - resp = HTTParty.get(USER_URL, query: query) - index = 0 - resp.parsed_response["members"].each do |user| - @users[index] = User.new(user["profile"]["real_name"], user["profile"]["status_text"], user["profile"]["status_emoji"]) - index += 1 - end - end - - def create_channels - query = { - token: API_KEY - } - puts API_KEY - resp = HTTParty.get(CHANNEL_URL, query: query) - index = 0 - resp.parsed_response["channels"].each do |channel| - @channels[index] = User.new(channel["name"], channel["topic"]["value"], channel["num_members"]) - index += 1 - end - end -=end - end \ No newline at end of file From 1f39ca740e3900311b0170fb4765e07ab2a50776 Mon Sep 17 00:00:00 2001 From: Sharon Cheung Date: Sat, 14 Mar 2020 21:36:09 -0700 Subject: [PATCH 03/25] added user_test - for self.get/list --- lib/slack.rb | 1 + lib/workspace.rb | 10 +- test/cassettes/users-list-endpoint.yml | 147 +++++++++++++++++++++++++ test/channel_test.rb | 0 test/slack_test.rb | 0 test/user_test.rb | 38 +++++++ test/workspace_test.rb | 0 7 files changed, 188 insertions(+), 8 deletions(-) create mode 100644 test/cassettes/users-list-endpoint.yml create mode 100644 test/channel_test.rb create mode 100644 test/slack_test.rb create mode 100644 test/user_test.rb create mode 100644 test/workspace_test.rb diff --git a/lib/slack.rb b/lib/slack.rb index a63ece59..45b5dffb 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -1,5 +1,6 @@ #!/usr/bin/env ruby require_relative 'workspace' +require 'table_print' def main workspace = Workspace.new diff --git a/lib/workspace.rb b/lib/workspace.rb index 1c39a123..2a195b7f 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -6,19 +6,13 @@ Dotenv.load -BASE_URL = "https://slack.com/api/" -API_KEY = ENV["SLACK_API_TOKEN"] -USER_URL = "#{BASE_URL}/users.list" -CHANNEL_URL = "#{BASE_URL}/conversations.list" - - class Workspace attr_reader :channels, :users, :selected def initialize - @channels = [] - @users = [] + @channels = Channel.list_all + @users = User.list_all @selected = "" end diff --git a/test/cassettes/users-list-endpoint.yml b/test/cassettes/users-list-endpoint.yml new file mode 100644 index 00000000..6dd59836 --- /dev/null +++ b/test/cassettes/users-list-endpoint.yml @@ -0,0 +1,147 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/bogus.endpoint?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: + - '80' + Connection: + - keep-alive + Date: + - Sun, 15 Mar 2020 03:48:44 GMT + Server: + - Apache + 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 + Referrer-Policy: + - no-referrer + X-Slack-Backend: + - h + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - 1302e61ceb1aa356135878410e2c0e6d + X-Xss-Protection: + - '0' + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-83yj + X-Cache: + - Miss from cloudfront + Via: + - 1.1 5565a51537c689d1d16f6b4d41f40082.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - u8fj9eaCitPWoNw0nc2-EHO0qRXT4jj6Ku9JyS-qM3FOk2qRXoh1Fg== + body: + encoding: ASCII-8BIT + string: '{"ok":false,"error":"unknown_method","req_method":"bogus.endpoint"}' + http_version: null + recorded_at: Sun, 15 Mar 2020 03:48:44 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: + - '1159' + Connection: + - keep-alive + Date: + - Sun, 15 Mar 2020 03:48:44 GMT + Server: + - Apache + X-Slack-Req-Id: + - 169b9b15718923499894e381817c1ca9 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + X-Accepted-Oauth-Scopes: + - users:read + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + 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' + Vary: + - Accept-Encoding + Pragma: + - no-cache + 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 + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-u4vs + X-Cache: + - Miss from cloudfront + Via: + - 1.1 57a21088b36c69a83578b5a5579df58f.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - juhaub4-Jpg8jeibgfC6WjBAvXF70nbZ0W1S7o5Dy3D5EtU-xDBhrA== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"TS3HWCGMD","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":"TS3HWCGMD"},"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":"US1N1DHGQ","team_id":"TS3HWCGMD","name":"nguyen.josephduy","deleted":false,"color":"9f69e7","real_name":"Joseph","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Joseph","real_name_normalized":"Joseph","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"ge6083656f20","first_name":"Joseph","last_name":"","image_24":"https:\/\/secure.gravatar.com\/avatar\/e6083656f2077a422235fefbd53c4f55.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\/e6083656f2077a422235fefbd53c4f55.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\/e6083656f2077a422235fefbd53c4f55.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\/e6083656f2077a422235fefbd53c4f55.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\/e6083656f2077a422235fefbd53c4f55.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\/e6083656f2077a422235fefbd53c4f55.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png","status_text_canonical":"","team":"TS3HWCGMD"},"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":1584071583},{"id":"US3U562F8","team_id":"TS3HWCGMD","name":"keikei1128","deleted":false,"color":"4bbe2e","real_name":"Sharon + Cheung","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Sharon + Cheung","real_name_normalized":"Sharon Cheung","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"c2c34f19a48a","image_original":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_original.jpg","is_custom_image":true,"image_24":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_24.jpg","image_32":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_32.jpg","image_48":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_48.jpg","image_72":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_72.jpg","image_192":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_192.jpg","image_512":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_512.jpg","image_1024":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_1024.jpg","status_text_canonical":"","team":"TS3HWCGMD"},"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":1584071583,"has_2fa":false},{"id":"U01031BGYK0","team_id":"TS3HWCGMD","name":"oscarapi","deleted":false,"color":"e7392d","real_name":"API + BOT","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"API + BOT","real_name_normalized":"API BOT","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g9a00fb2c827","api_app_id":"AUVV4G666","always_active":true,"bot_id":"BV21DTJN6","first_name":"API","last_name":"BOT","image_24":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-512.png","status_text_canonical":"","team":"TS3HWCGMD"},"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":1584234381}],"cache_ts":1584244124,"response_metadata":{"next_cursor":""}}' + http_version: null + recorded_at: Sun, 15 Mar 2020 03:48:44 GMT +recorded_with: VCR 5.1.0 diff --git a/test/channel_test.rb b/test/channel_test.rb new file mode 100644 index 00000000..e69de29b diff --git a/test/slack_test.rb b/test/slack_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..662c29a9 --- /dev/null +++ b/test/user_test.rb @@ -0,0 +1,38 @@ +require_relative "test_helper" +require_relative "../lib/user" + +describe "User" do + describe "self.get" do + it "gets a list of users and returns them as an HTTParty Response" do + result = {} + VCR.use_cassette("users-list-endpoint") do + result = User.get("https://slack.com/api/users.list") + end + + expect(result).must_be_kind_of HTTParty::Response + expect(result["ok"]).must_equal true + end + + it "raises an error when a call fails" do + VCR.use_cassette("users-list-endpoint") do + expect{result = User.get("https://slack.com/api/bogus.endpoint")}.must_raise SlackAPIError + end + end + end + + describe "self.list" do + it "return a valid list of the users" do + result = [] + + VCR.use_cassette("users-list-endpoint") do + result = User.list_all + end + + expect(result).must_be_kind_of Array + expect(result.length).must_be :>, 0 + result.each do |user| + expect(user).must_be_kind_of User + end + end + end +end \ No newline at end of file diff --git a/test/workspace_test.rb b/test/workspace_test.rb new file mode 100644 index 00000000..e69de29b From d731beb8468c6206cd3132852a59489635fb7dd6 Mon Sep 17 00:00:00 2001 From: Sharon Cheung Date: Sat, 14 Mar 2020 21:55:16 -0700 Subject: [PATCH 04/25] added channel test for self.get/.list --- lib/workspace.rb | 1 - test/cassettes/channel-list-endpoint.yml | 148 +++++++++++++++++++++++ test/cassettes/users-list-endpoint.yml | 116 +++++++++--------- test/channel_test.rb | 38 ++++++ 4 files changed, 244 insertions(+), 59 deletions(-) create mode 100644 test/cassettes/channel-list-endpoint.yml diff --git a/lib/workspace.rb b/lib/workspace.rb index 2a195b7f..52bfb3ec 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -1,6 +1,5 @@ require "httparty" require "dotenv" -require 'json' require_relative "user" require_relative "channel" diff --git a/test/cassettes/channel-list-endpoint.yml b/test/cassettes/channel-list-endpoint.yml new file mode 100644 index 00000000..bcf95874 --- /dev/null +++ b/test/cassettes/channel-list-endpoint.yml @@ -0,0 +1,148 @@ +--- +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: + - '646' + Connection: + - keep-alive + Date: + - Sun, 15 Mar 2020 04:54:41 GMT + Server: + - Apache + X-Slack-Req-Id: + - 500eec2a552269cc7e9332092fb1e9c8 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Slack-Backend: + - h + 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' + Vary: + - Accept-Encoding + Pragma: + - no-cache + 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 + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-1j27 + X-Cache: + - Miss from cloudfront + Via: + - 1.1 324a68a6c25ee50d774953f3e15a611d.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - mMBcyOQMIBd-UD9AfnSLu9jIXh98s5kVPdFBrMt3pK1BW-7cdMLOJA== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channels":[{"id":"CRNUDTRQS","name":"everything","is_channel":true,"is_group":false,"is_im":false,"created":1577251090,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"everything","is_shared":false,"parent_conversation":null,"creator":"US1N1DHGQ","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TS3HWCGMD"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"Everything + but work!","creator":"US3U562F8","last_set":1584078931},"purpose":{"value":"","creator":"","last_set":0},"previous_names":[],"num_members":2},{"id":"CRQ896WKD","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1577251089,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"US1N1DHGQ","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TS3HWCGMD"],"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":"US1N1DHGQ","last_set":1577251089},"purpose":{"value":"This + channel is for workspace-wide communication and announcements. All members + are in this channel.","creator":"US1N1DHGQ","last_set":1577251089},"previous_names":[],"num_members":2},{"id":"CS3U4UHC6","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1577251089,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"US1N1DHGQ","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TS3HWCGMD"],"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":"US1N1DHGQ","last_set":1577251089},"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":"US1N1DHGQ","last_set":1577251089},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' + http_version: null + recorded_at: Sun, 15 Mar 2020 04:54:41 GMT +- request: + method: get + uri: https://slack.com/api/bogus.endpoint?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: + - '80' + Connection: + - keep-alive + Date: + - Sun, 15 Mar 2020 04:54:41 GMT + Server: + - Apache + 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 + Referrer-Policy: + - no-referrer + X-Slack-Backend: + - h + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - 1d2b4f1379c8496b469a2cbbbe579586 + X-Xss-Protection: + - '0' + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-ml25 + X-Cache: + - Miss from cloudfront + Via: + - 1.1 61bc723adb3b1884ed759711e84e13a9.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - eB8zPDDittCPESR1QEcRATVLjU3gImw38xNiurcq_R55V-AnfI_Ggg== + body: + encoding: ASCII-8BIT + string: '{"ok":false,"error":"unknown_method","req_method":"bogus.endpoint"}' + http_version: null + recorded_at: Sun, 15 Mar 2020 04:54:41 GMT +recorded_with: VCR 5.1.0 diff --git a/test/cassettes/users-list-endpoint.yml b/test/cassettes/users-list-endpoint.yml index 6dd59836..b05182f7 100644 --- a/test/cassettes/users-list-endpoint.yml +++ b/test/cassettes/users-list-endpoint.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: get - uri: https://slack.com/api/bogus.endpoint?token= + uri: https://slack.com/api/users.list?token= body: encoding: US-ASCII string: '' @@ -21,52 +21,68 @@ http_interactions: Content-Type: - application/json; charset=utf-8 Content-Length: - - '80' + - '1159' Connection: - keep-alive Date: - - Sun, 15 Mar 2020 03:48:44 GMT + - Sun, 15 Mar 2020 04:54:41 GMT Server: - Apache - 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 - Referrer-Policy: - - no-referrer - X-Slack-Backend: - - h + X-Slack-Req-Id: + - 8d585781d48766d6332abeef21852e57 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + X-Accepted-Oauth-Scopes: + - users:read Access-Control-Expose-Headers: - x-slack-req-id, retry-after - Vary: - - Accept-Encoding + X-Slack-Backend: + - h X-Content-Type-Options: - nosniff - X-Slack-Req-Id: - - 1302e61ceb1aa356135878410e2c0e6d + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate X-Xss-Protection: - '0' + Vary: + - Accept-Encoding + Pragma: + - no-cache + 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 + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer Access-Control-Allow-Origin: - "*" X-Via: - - haproxy-www-83yj + - haproxy-www-60pe X-Cache: - Miss from cloudfront Via: - - 1.1 5565a51537c689d1d16f6b4d41f40082.cloudfront.net (CloudFront) + - 1.1 4c7c693b007dfce603c83f138e31bccb.cloudfront.net (CloudFront) X-Amz-Cf-Pop: - SEA19-C2 X-Amz-Cf-Id: - - u8fj9eaCitPWoNw0nc2-EHO0qRXT4jj6Ku9JyS-qM3FOk2qRXoh1Fg== + - MiKAQw-9wIqvei6YhZRzOJ-C0XXOTR4MCBaoVN0olU6z2yopXjsafQ== body: encoding: ASCII-8BIT - string: '{"ok":false,"error":"unknown_method","req_method":"bogus.endpoint"}' + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"TS3HWCGMD","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":"TS3HWCGMD"},"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":"US1N1DHGQ","team_id":"TS3HWCGMD","name":"nguyen.josephduy","deleted":false,"color":"9f69e7","real_name":"Joseph","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Joseph","real_name_normalized":"Joseph","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"ge6083656f20","first_name":"Joseph","last_name":"","image_24":"https:\/\/secure.gravatar.com\/avatar\/e6083656f2077a422235fefbd53c4f55.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\/e6083656f2077a422235fefbd53c4f55.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\/e6083656f2077a422235fefbd53c4f55.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\/e6083656f2077a422235fefbd53c4f55.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\/e6083656f2077a422235fefbd53c4f55.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\/e6083656f2077a422235fefbd53c4f55.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png","status_text_canonical":"","team":"TS3HWCGMD"},"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":1584071583},{"id":"US3U562F8","team_id":"TS3HWCGMD","name":"keikei1128","deleted":false,"color":"4bbe2e","real_name":"Sharon + Cheung","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Sharon + Cheung","real_name_normalized":"Sharon Cheung","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"c2c34f19a48a","image_original":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_original.jpg","is_custom_image":true,"image_24":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_24.jpg","image_32":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_32.jpg","image_48":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_48.jpg","image_72":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_72.jpg","image_192":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_192.jpg","image_512":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_512.jpg","image_1024":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_1024.jpg","status_text_canonical":"","team":"TS3HWCGMD"},"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":1584071583,"has_2fa":false},{"id":"U01031BGYK0","team_id":"TS3HWCGMD","name":"oscarapi","deleted":false,"color":"e7392d","real_name":"API + BOT","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"API + BOT","real_name_normalized":"API BOT","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g9a00fb2c827","api_app_id":"AUVV4G666","always_active":true,"bot_id":"BV21DTJN6","first_name":"API","last_name":"BOT","image_24":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-512.png","status_text_canonical":"","team":"TS3HWCGMD"},"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":1584234381}],"cache_ts":1584248081,"response_metadata":{"next_cursor":""}}' http_version: null - recorded_at: Sun, 15 Mar 2020 03:48:44 GMT + recorded_at: Sun, 15 Mar 2020 04:54:41 GMT - request: method: get - uri: https://slack.com/api/users.list?token= + uri: https://slack.com/api/bogus.endpoint?token= body: encoding: US-ASCII string: '' @@ -85,63 +101,47 @@ http_interactions: Content-Type: - application/json; charset=utf-8 Content-Length: - - '1159' + - '80' Connection: - keep-alive Date: - - Sun, 15 Mar 2020 03:48:44 GMT + - Sun, 15 Mar 2020 04:54:41 GMT Server: - Apache - X-Slack-Req-Id: - - 169b9b15718923499894e381817c1ca9 - X-Oauth-Scopes: - - identify,channels:read,users:read,chat:write - X-Accepted-Oauth-Scopes: - - users:read + 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 + Referrer-Policy: + - no-referrer + X-Slack-Backend: + - h Access-Control-Expose-Headers: - x-slack-req-id, retry-after - X-Slack-Backend: - - r + Vary: + - Accept-Encoding X-Content-Type-Options: - nosniff - Expires: - - Mon, 26 Jul 1997 05:00:00 GMT - Cache-Control: - - private, no-cache, no-store, must-revalidate + X-Slack-Req-Id: + - c342795a254c03d7cc405e4e4de1efac X-Xss-Protection: - '0' - Vary: - - Accept-Encoding - Pragma: - - no-cache - 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 - Strict-Transport-Security: - - max-age=31536000; includeSubDomains; preload - Referrer-Policy: - - no-referrer Access-Control-Allow-Origin: - "*" X-Via: - - haproxy-www-u4vs + - haproxy-www-xy81 X-Cache: - Miss from cloudfront Via: - - 1.1 57a21088b36c69a83578b5a5579df58f.cloudfront.net (CloudFront) + - 1.1 943c6a4d4ee43b18ee91634536f53eae.cloudfront.net (CloudFront) X-Amz-Cf-Pop: - SEA19-C2 X-Amz-Cf-Id: - - juhaub4-Jpg8jeibgfC6WjBAvXF70nbZ0W1S7o5Dy3D5EtU-xDBhrA== + - g-un9RLd4HBN4BHv67aS3cPSdoE0ECJC4fpqu6ycHzNzs--OB3xnBA== body: encoding: ASCII-8BIT - string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"TS3HWCGMD","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":"TS3HWCGMD"},"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":"US1N1DHGQ","team_id":"TS3HWCGMD","name":"nguyen.josephduy","deleted":false,"color":"9f69e7","real_name":"Joseph","tz":"America\/Los_Angeles","tz_label":"Pacific - Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Joseph","real_name_normalized":"Joseph","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"ge6083656f20","first_name":"Joseph","last_name":"","image_24":"https:\/\/secure.gravatar.com\/avatar\/e6083656f2077a422235fefbd53c4f55.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\/e6083656f2077a422235fefbd53c4f55.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\/e6083656f2077a422235fefbd53c4f55.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\/e6083656f2077a422235fefbd53c4f55.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\/e6083656f2077a422235fefbd53c4f55.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\/e6083656f2077a422235fefbd53c4f55.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png","status_text_canonical":"","team":"TS3HWCGMD"},"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":1584071583},{"id":"US3U562F8","team_id":"TS3HWCGMD","name":"keikei1128","deleted":false,"color":"4bbe2e","real_name":"Sharon - Cheung","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Sharon - Cheung","real_name_normalized":"Sharon Cheung","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"c2c34f19a48a","image_original":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_original.jpg","is_custom_image":true,"image_24":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_24.jpg","image_32":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_32.jpg","image_48":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_48.jpg","image_72":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_72.jpg","image_192":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_192.jpg","image_512":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_512.jpg","image_1024":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_1024.jpg","status_text_canonical":"","team":"TS3HWCGMD"},"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":1584071583,"has_2fa":false},{"id":"U01031BGYK0","team_id":"TS3HWCGMD","name":"oscarapi","deleted":false,"color":"e7392d","real_name":"API - BOT","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"API - BOT","real_name_normalized":"API BOT","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g9a00fb2c827","api_app_id":"AUVV4G666","always_active":true,"bot_id":"BV21DTJN6","first_name":"API","last_name":"BOT","image_24":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-512.png","status_text_canonical":"","team":"TS3HWCGMD"},"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":1584234381}],"cache_ts":1584244124,"response_metadata":{"next_cursor":""}}' + string: '{"ok":false,"error":"unknown_method","req_method":"bogus.endpoint"}' http_version: null - recorded_at: Sun, 15 Mar 2020 03:48:44 GMT + recorded_at: Sun, 15 Mar 2020 04:54:41 GMT recorded_with: VCR 5.1.0 diff --git a/test/channel_test.rb b/test/channel_test.rb index e69de29b..2fa4ca92 100644 --- a/test/channel_test.rb +++ b/test/channel_test.rb @@ -0,0 +1,38 @@ +require_relative "test_helper" +require_relative "../lib/channel" + +describe "Channel" do + describe "self.get" do + it "gets a list of channels and returns them as an HTTParty Response" do + result = {} + VCR.use_cassette("channel-list-endpoint") do + result = Channel.get("https://slack.com/api/conversations.list") + end + + expect(result).must_be_kind_of HTTParty::Response + expect(result["ok"]).must_equal true + end + + it "raises an error when a call fails" do + VCR.use_cassette("channel-list-endpoint") do + expect{result = Channel.get("https://slack.com/api/bogus.endpoint")}.must_raise SlackAPIError + end + end + end + + describe "self.list" do + it "return a valid list of the channels" do + result = [] + + VCR.use_cassette("channel-list-endpoint") do + result = Channel.list_all + end + + expect(result).must_be_kind_of Array + expect(result.length).must_be :>, 0 + result.each do |channel| + expect(channel).must_be_kind_of Channel + end + end + end +end \ No newline at end of file From 9a49a6a3bd894c696c8cdf2667ce5005c58bd000 Mon Sep 17 00:00:00 2001 From: Sharon Cheung Date: Sun, 15 Mar 2020 01:24:47 -0700 Subject: [PATCH 05/25] added show_details in workspace --- lib/slack.rb | 33 +++++++++++++++++++++------------ lib/workspace.rb | 20 ++++++++++++++++++-- 2 files changed, 39 insertions(+), 14 deletions(-) diff --git a/lib/slack.rb b/lib/slack.rb index 45b5dffb..d085aee6 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -1,6 +1,11 @@ #!/usr/bin/env ruby -require_relative 'workspace' require 'table_print' +require "dotenv" +require "httparty" + +require_relative 'workspace' + +Dotenv.load def main workspace = Workspace.new @@ -22,23 +27,27 @@ def main when "select user" print "Please enter the user name or ID: " - puts workspace.select_user + user_name = gets.chomp.to_s + workspace.select_user(user_name) puts "\n" when "select channel" print "Please enter the channel name or ID: " - puts workspace.select_channel + channel_name = gets.chomp.to_s + workspace.select_channel(channel_name) puts "\n" when "details" - if workspace.selected == nil - puts "Please select a user or channel." - puts "\n" - else - workspace.show_details - user_input = nil - puts "\n" - end + puts workspace.show_details + #if workspace.selected == nil + # puts "Please select a user or channel." + # puts "\n" + #else + # puts workspace.show_details + # user_input = nil + # puts "\n" + #end + when "send message" if workspace.selected == nil puts "Please select a user or channel." @@ -64,4 +73,4 @@ def prompt_for_input return gets.chomp.downcase end -main if __FILE__ == $PROGRAM_NAME +main if __FILE__ == $PROGRAM_NAME \ No newline at end of file diff --git a/lib/workspace.rb b/lib/workspace.rb index 52bfb3ec..7a04e3f2 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -15,13 +15,29 @@ def initialize @selected = "" end - def select_channel + def select_channel(channel_name) + @channels.each do |channel| + if (channel.name) == channel_name + @selected = channel + end + end end - def select_user + def select_user(user_name) + @users.each do |user| + if (user.real_name) == user_name + @selected = user + end + end end def show_details + if @selected.class == Channel + return "Channel name = #{@selected.name}, topic = #{@selected.topic}, memeber count = #{@selected.memeber_count}, slack id = #{@selected.slack_id}" + elsif + @selected.class == User + return "Class name = #{@selected.real_name}, name = #{@selected.name}, slack id = #{@selected.slack_id}" + end end def send_message From 7ac014da911b95bd999f1db1c17f710b5cfed044 Mon Sep 17 00:00:00 2001 From: Sharon Cheung Date: Sun, 15 Mar 2020 01:26:14 -0700 Subject: [PATCH 06/25] fix details in slack.rb --- lib/slack.rb | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/lib/slack.rb b/lib/slack.rb index d085aee6..bd70af17 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -38,15 +38,14 @@ def main puts "\n" when "details" - puts workspace.show_details - #if workspace.selected == nil - # puts "Please select a user or channel." - # puts "\n" - #else - # puts workspace.show_details - # user_input = nil - # puts "\n" - #end + if workspace.selected == nil + puts "Please select a user or channel." + puts "\n" + else + puts workspace.show_details + user_input = nil + puts "\n" + end when "send message" if workspace.selected == nil From a1e6876fb5238abbd47bfdd299cde493671ab248 Mon Sep 17 00:00:00 2001 From: Sharon Cheung Date: Sun, 15 Mar 2020 01:51:52 -0700 Subject: [PATCH 07/25] adding send_message method --- lib/slack.rb | 1 + lib/workspace.rb | 1 + 2 files changed, 2 insertions(+) diff --git a/lib/slack.rb b/lib/slack.rb index bd70af17..a05749d8 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -53,6 +53,7 @@ def main puts "\n" else print "Please enter your message: " + message = get.chomp.to_s workspace.send_message puts "\n" end diff --git a/lib/workspace.rb b/lib/workspace.rb index 7a04e3f2..9758fa7a 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -41,6 +41,7 @@ def show_details end def send_message + HTTParty.post("https://slack.com/api/chat.postMessage", query: { token: ENV["SLACK_API_TOKEN"], channel: @selected , text: "user_input" }) end end \ No newline at end of file From 821a4e06fecf1c0350b385263f7d26e0769b3020 Mon Sep 17 00:00:00 2001 From: Sharon Cheung Date: Sun, 15 Mar 2020 14:46:41 -0700 Subject: [PATCH 08/25] added send message method --- lib/slack.rb | 4 ++-- lib/workspace.rb | 9 +++++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/lib/slack.rb b/lib/slack.rb index a05749d8..72449368 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -53,8 +53,8 @@ def main puts "\n" else print "Please enter your message: " - message = get.chomp.to_s - workspace.send_message + message = gets.chomp.to_s + workspace.send_message(message) puts "\n" end else diff --git a/lib/workspace.rb b/lib/workspace.rb index 9758fa7a..4ea05414 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -40,8 +40,13 @@ def show_details end end - def send_message - HTTParty.post("https://slack.com/api/chat.postMessage", query: { token: ENV["SLACK_API_TOKEN"], channel: @selected , text: "user_input" }) + def send_message(message) + url = "https://slack.com/api/chat.postMessage" + if @selected.class == Channel + HTTParty.post(url , query: {token: ENV["SLACK_API_TOKEN"], channel: @selected.name, text: message}) + elsif @selected.class == User + HTTParty.post(url , query: {token: ENV["SLACK_API_TOKEN"], channel: "@#{@selected.name}", text: message}) + end end end \ No newline at end of file From e8a264daafde5b7b2957dd4c37ac6f8953591d67 Mon Sep 17 00:00:00 2001 From: Sharon Cheung Date: Sun, 15 Mar 2020 15:07:52 -0700 Subject: [PATCH 09/25] change some interface --- lib/slack.rb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/slack.rb b/lib/slack.rb index 72449368..45a3630f 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -32,14 +32,14 @@ def main puts "\n" when "select channel" - print "Please enter the channel name or ID: " + print "\n Please enter the channel name or ID: " channel_name = gets.chomp.to_s workspace.select_channel(channel_name) puts "\n" when "details" - if workspace.selected == nil - puts "Please select a user or channel." + if workspace.selected == "" + puts "\nYou haven't selected a user or channel!!! Try again!" puts "\n" else puts workspace.show_details @@ -48,7 +48,7 @@ def main end when "send message" - if workspace.selected == nil + if workspace.selected == "" puts "Please select a user or channel." puts "\n" else @@ -69,7 +69,7 @@ def main end def prompt_for_input - print "Please choose an option: list users, list channels, select user, select channel, details, send message, or quit: \n" + print "Please choose an option: \n list users, \n list channels, \n select user, \n select channel, \n details, \n send message, \n or quit: \n" return gets.chomp.downcase end From 9a569474298f5c8ba2d44f545672e3d57bcb448a Mon Sep 17 00:00:00 2001 From: Sharon Cheung Date: Sun, 15 Mar 2020 19:07:26 -0700 Subject: [PATCH 10/25] added test for workspace - initialize --- test/cassettes/create_workspace.yml | 164 +++++++++++++++++++++++++ test/cassettes/users-list-endpoint.yml | 81 ++++++++++++ test/slack_test.rb | 0 test/test_helper.rb | 2 +- test/workspace_test.rb | 61 +++++++++ 5 files changed, 307 insertions(+), 1 deletion(-) create mode 100644 test/cassettes/create_workspace.yml delete mode 100644 test/slack_test.rb diff --git a/test/cassettes/create_workspace.yml b/test/cassettes/create_workspace.yml new file mode 100644 index 00000000..53fee553 --- /dev/null +++ b/test/cassettes/create_workspace.yml @@ -0,0 +1,164 @@ +--- +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: + - '646' + Connection: + - keep-alive + Date: + - Mon, 16 Mar 2020 01:18:34 GMT + Server: + - Apache + X-Slack-Req-Id: + - d0fed5b83d4c88ad41d724ac6e821f95 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Slack-Backend: + - h + 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' + Vary: + - Accept-Encoding + Pragma: + - no-cache + 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 + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-huvv + X-Cache: + - Miss from cloudfront + Via: + - 1.1 d6b180eb367f7de26d67a9f3901b96a6.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - vQESKHhwP2vGcsGBXRC2KbU-l2_f7pVB0Tyet2U9z7_slA0waW-WFQ== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channels":[{"id":"CRNUDTRQS","name":"everything","is_channel":true,"is_group":false,"is_im":false,"created":1577251090,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"everything","is_shared":false,"parent_conversation":null,"creator":"US1N1DHGQ","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TS3HWCGMD"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"Everything + but work!","creator":"US3U562F8","last_set":1584078931},"purpose":{"value":"","creator":"","last_set":0},"previous_names":[],"num_members":2},{"id":"CRQ896WKD","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1577251089,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"US1N1DHGQ","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TS3HWCGMD"],"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":"US1N1DHGQ","last_set":1577251089},"purpose":{"value":"This + channel is for workspace-wide communication and announcements. All members + are in this channel.","creator":"US1N1DHGQ","last_set":1577251089},"previous_names":[],"num_members":2},{"id":"CS3U4UHC6","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1577251089,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"US1N1DHGQ","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TS3HWCGMD"],"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":"US1N1DHGQ","last_set":1577251089},"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":"US1N1DHGQ","last_set":1577251089},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' + http_version: null + recorded_at: Mon, 16 Mar 2020 01:18:34 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: + - '1159' + Connection: + - keep-alive + Date: + - Mon, 16 Mar 2020 01:18:34 GMT + Server: + - Apache + X-Slack-Req-Id: + - 24bac37b814ce3ec41078d0aa03a8831 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + X-Accepted-Oauth-Scopes: + - users:read + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Slack-Backend: + - h + 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' + Vary: + - Accept-Encoding + Pragma: + - no-cache + 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 + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-v5bn + X-Cache: + - Miss from cloudfront + Via: + - 1.1 e36ab1b8726f47aa5adc8e19e66d1bbe.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - fRqQwB8CmWwMM2CfUwbnp2gmFEOrs5PC_o3Tj1--s_H9rICtFwI1Rw== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"TS3HWCGMD","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":"TS3HWCGMD"},"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":"US1N1DHGQ","team_id":"TS3HWCGMD","name":"nguyen.josephduy","deleted":false,"color":"9f69e7","real_name":"Joseph","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Joseph","real_name_normalized":"Joseph","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"ge6083656f20","first_name":"Joseph","last_name":"","image_24":"https:\/\/secure.gravatar.com\/avatar\/e6083656f2077a422235fefbd53c4f55.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\/e6083656f2077a422235fefbd53c4f55.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\/e6083656f2077a422235fefbd53c4f55.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\/e6083656f2077a422235fefbd53c4f55.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\/e6083656f2077a422235fefbd53c4f55.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\/e6083656f2077a422235fefbd53c4f55.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png","status_text_canonical":"","team":"TS3HWCGMD"},"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":1584071583},{"id":"US3U562F8","team_id":"TS3HWCGMD","name":"keikei1128","deleted":false,"color":"4bbe2e","real_name":"Sharon + Cheung","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Sharon + Cheung","real_name_normalized":"Sharon Cheung","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"c2c34f19a48a","image_original":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_original.jpg","is_custom_image":true,"image_24":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_24.jpg","image_32":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_32.jpg","image_48":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_48.jpg","image_72":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_72.jpg","image_192":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_192.jpg","image_512":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_512.jpg","image_1024":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_1024.jpg","status_text_canonical":"","team":"TS3HWCGMD"},"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":1584071583,"has_2fa":false},{"id":"U01031BGYK0","team_id":"TS3HWCGMD","name":"oscarapi","deleted":false,"color":"e7392d","real_name":"API + BOT","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"API + BOT","real_name_normalized":"API BOT","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g9a00fb2c827","api_app_id":"AUVV4G666","always_active":true,"bot_id":"BV21DTJN6","first_name":"API","last_name":"BOT","image_24":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-512.png","status_text_canonical":"","team":"TS3HWCGMD"},"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":1584234381}],"cache_ts":1584321514,"response_metadata":{"next_cursor":""}}' + http_version: null + recorded_at: Mon, 16 Mar 2020 01:18:34 GMT +recorded_with: VCR 5.1.0 diff --git a/test/cassettes/users-list-endpoint.yml b/test/cassettes/users-list-endpoint.yml index b05182f7..e4451671 100644 --- a/test/cassettes/users-list-endpoint.yml +++ b/test/cassettes/users-list-endpoint.yml @@ -144,4 +144,85 @@ http_interactions: string: '{"ok":false,"error":"unknown_method","req_method":"bogus.endpoint"}' http_version: null recorded_at: Sun, 15 Mar 2020 04:54:41 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: + - '646' + Connection: + - keep-alive + Date: + - Mon, 16 Mar 2020 00:46:59 GMT + Server: + - Apache + X-Slack-Req-Id: + - e32346168eaf85567b4305a842cece53 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Slack-Backend: + - h + 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' + Vary: + - Accept-Encoding + Pragma: + - no-cache + 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 + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-exg7 + X-Cache: + - Miss from cloudfront + Via: + - 1.1 0bb842bd5868b86440983b936bb0adef.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C1 + X-Amz-Cf-Id: + - MrHyoxAJL1sUsETGNgVauatZrax0hF3k88pmXDhxDKU8XltpPWwvOw== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channels":[{"id":"CRNUDTRQS","name":"everything","is_channel":true,"is_group":false,"is_im":false,"created":1577251090,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"everything","is_shared":false,"parent_conversation":null,"creator":"US1N1DHGQ","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TS3HWCGMD"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"Everything + but work!","creator":"US3U562F8","last_set":1584078931},"purpose":{"value":"","creator":"","last_set":0},"previous_names":[],"num_members":2},{"id":"CRQ896WKD","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1577251089,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"US1N1DHGQ","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TS3HWCGMD"],"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":"US1N1DHGQ","last_set":1577251089},"purpose":{"value":"This + channel is for workspace-wide communication and announcements. All members + are in this channel.","creator":"US1N1DHGQ","last_set":1577251089},"previous_names":[],"num_members":2},{"id":"CS3U4UHC6","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1577251089,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"US1N1DHGQ","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TS3HWCGMD"],"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":"US1N1DHGQ","last_set":1577251089},"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":"US1N1DHGQ","last_set":1577251089},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' + http_version: null + recorded_at: Mon, 16 Mar 2020 00:46:59 GMT recorded_with: VCR 5.1.0 diff --git a/test/slack_test.rb b/test/slack_test.rb deleted file mode 100644 index e69de29b..00000000 diff --git a/test/test_helper.rb b/test/test_helper.rb index 325198fc..088cfa61 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -8,7 +8,7 @@ require 'minitest/reporters' require 'minitest/skip_dsl' require 'vcr' - + Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new VCR.configure do |config| diff --git a/test/workspace_test.rb b/test/workspace_test.rb index e69de29b..91113ea6 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -0,0 +1,61 @@ +require_relative "test_helper" +require_relative '../lib/workspace' + +describe "Workspace" do + describe "Initialize" do + before do + VCR.use_cassette("create_workspace") do + @workspace = Workspace.new + end + end + + it "will create a new Workplace" do + expect(@workspace).must_be_instance_of Workspace + end + + it "will have an array of Channels and Users" do + expect(@workspace.channels).must_be_instance_of Array + expect(@workspace.users).must_be_instance_of Array + end + + end +end + + +=begin +describe "User" do + describe "self.get" do + it "gets a list of users and returns them as an HTTParty Response" do + result = {} + VCR.use_cassette("users-list-endpoint") do + result = User.get("https://slack.com/api/users.list") + end + + expect(result).must_be_kind_of HTTParty::Response + expect(result["ok"]).must_equal true + end + + it "raises an error when a call fails" do + VCR.use_cassette("users-list-endpoint") do + expect{result = User.get("https://slack.com/api/bogus.endpoint")}.must_raise SlackAPIError + end + end + end + + describe "self.list" do + it "return a valid list of the users" do + result = [] + + VCR.use_cassette("users-list-endpoint") do + result = User.list_all + end + + expect(result).must_be_kind_of Array + expect(result.length).must_be :>, 0 + result.each do |user| + expect(user).must_be_kind_of User + end + end + end +end +=end \ No newline at end of file From c178136d934013c2e2a92b76dc429958c1dc7860 Mon Sep 17 00:00:00 2001 From: Sharon Cheung Date: Sun, 15 Mar 2020 19:30:52 -0700 Subject: [PATCH 11/25] added select user test in workspace_test --- test/workspace_test.rb | 60 ++++++++++++++++++------------------------ 1 file changed, 26 insertions(+), 34 deletions(-) diff --git a/test/workspace_test.rb b/test/workspace_test.rb index 91113ea6..bb43f2d4 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -17,45 +17,37 @@ expect(@workspace.channels).must_be_instance_of Array expect(@workspace.users).must_be_instance_of Array end - end -end - - -=begin -describe "User" do - describe "self.get" do - it "gets a list of users and returns them as an HTTParty Response" do - result = {} - VCR.use_cassette("users-list-endpoint") do - result = User.get("https://slack.com/api/users.list") - end - expect(result).must_be_kind_of HTTParty::Response - expect(result["ok"]).must_equal true + describe "select_channel(channel_name)" do + before do + VCR.use_cassette("create_workspace")do + @workspace = Workspace.new end - - it "raises an error when a call fails" do - VCR.use_cassette("users-list-endpoint") do - expect{result = User.get("https://slack.com/api/bogus.endpoint")}.must_raise SlackAPIError - end + end + + it "will return an instance of Channel based on the user input" do + @workspace.select_channel("random") + expect(@workspace.selected).must_be_instance_of Channel + expect(@workspace.selected.name).must_equal "random" end end - describe "self.list" do - it "return a valid list of the users" do - result = [] - - VCR.use_cassette("users-list-endpoint") do - result = User.list_all - end - - expect(result).must_be_kind_of Array - expect(result.length).must_be :>, 0 - result.each do |user| - expect(user).must_be_kind_of User - end +=begin + describe "select_user(user_name)" do + before do + VCR.use_cassette("create_workspace")do + @workspace = Workspace.new + end + end + + it "will return an instance of User based on the user input" do + @workspace.select_user("random") + expect(@workspace.selected).must_be_instance_of Channel + expect(@workspace.selected.name).must_equal "random" end end -end -=end \ No newline at end of file +=end + +end + From e07684647df3874d76c1e970cbd4f00ed4f92716 Mon Sep 17 00:00:00 2001 From: Sharon Cheung Date: Sun, 15 Mar 2020 19:32:22 -0700 Subject: [PATCH 12/25] added select_user test for workspace test --- test/workspace_test.rb | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/test/workspace_test.rb b/test/workspace_test.rb index bb43f2d4..3c80d876 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -33,21 +33,32 @@ end end -=begin - describe "select_user(user_name)" do + describe "select_channel(channel_name)" do before do VCR.use_cassette("create_workspace")do @workspace = Workspace.new end end - it "will return an instance of User based on the user input" do - @workspace.select_user("random") + it "will return a Channel based on the user input" do + @workspace.select_channel("random") expect(@workspace.selected).must_be_instance_of Channel expect(@workspace.selected.name).must_equal "random" end end -=end + describe "select_user(user_name)" do + before do + VCR.use_cassette("create_workspace")do + @workspace = Workspace.new + end + end + + it "will return an instance of User based on the user input" do + @workspace.select_user("Joseph") + expect(@workspace.selected).must_be_instance_of User + expect(@workspace.selected.real_name).must_equal "Joseph" + end + end end From 2b27ddfc2088d47d67fb58ef4a16fec89fa4c60d Mon Sep 17 00:00:00 2001 From: Sharon Cheung Date: Sun, 15 Mar 2020 23:47:20 -0700 Subject: [PATCH 13/25] fixed bugs in select_channel & select_user --- lib/slack.rb | 2 +- lib/workspace.rb | 21 +++- test/cassettes/channel-list-endpoint.yml | 118 +++++++++++------------ test/cassettes/create_workspace.yml | 30 +++--- test/cassettes/users-list-endpoint.yml | 107 +++----------------- test/channel_test.rb | 2 +- test/workspace_test.rb | 16 ++- 7 files changed, 122 insertions(+), 174 deletions(-) diff --git a/lib/slack.rb b/lib/slack.rb index 45a3630f..5dc268ca 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -49,7 +49,7 @@ def main when "send message" if workspace.selected == "" - puts "Please select a user or channel." + puts "\nYou haven't selected a user or channel!!! Try again!" puts "\n" else print "Please enter your message: " diff --git a/lib/workspace.rb b/lib/workspace.rb index 4ea05414..6b7fe28b 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -12,23 +12,40 @@ class Workspace def initialize @channels = Channel.list_all @users = User.list_all - @selected = "" + @selected = nil end def select_channel(channel_name) @channels.each do |channel| if (channel.name) == channel_name @selected = channel + break + elsif (channel.slack_id) == channel_name + @selected = channel + else + @selected = nil end end + if @selected == nil + puts "The channel you just entered is not valid!!" + end end def select_user(user_name) @users.each do |user| - if (user.real_name) == user_name + if user.real_name == user_name @selected = user + break + elsif user.slack_id == user_name + @selected = user + else + @selected = nil end end + + if @selected == nil + puts "The user you just entered is not valid!!!" + end end def show_details diff --git a/test/cassettes/channel-list-endpoint.yml b/test/cassettes/channel-list-endpoint.yml index bcf95874..51d47d6b 100644 --- a/test/cassettes/channel-list-endpoint.yml +++ b/test/cassettes/channel-list-endpoint.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: get - uri: https://slack.com/api/conversations.list?token= + uri: https://slack.com/api/bogus.endpoint?token= body: encoding: US-ASCII string: '' @@ -21,69 +21,52 @@ http_interactions: Content-Type: - application/json; charset=utf-8 Content-Length: - - '646' + - '80' Connection: - keep-alive Date: - - Sun, 15 Mar 2020 04:54:41 GMT + - Mon, 16 Mar 2020 04:43:36 GMT Server: - Apache - X-Slack-Req-Id: - - 500eec2a552269cc7e9332092fb1e9c8 - X-Oauth-Scopes: - - identify,channels:read,users:read,chat:write - X-Accepted-Oauth-Scopes: - - channels:read,groups:read,mpim:read,im:read,read - Access-Control-Expose-Headers: - - x-slack-req-id, retry-after + 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 + Referrer-Policy: + - no-referrer X-Slack-Backend: - h + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + Vary: + - Accept-Encoding X-Content-Type-Options: - nosniff - Expires: - - Mon, 26 Jul 1997 05:00:00 GMT - Cache-Control: - - private, no-cache, no-store, must-revalidate + X-Slack-Req-Id: + - aefd942b540d1ebfd300982c6ed00b55 X-Xss-Protection: - '0' - Vary: - - Accept-Encoding - Pragma: - - no-cache - 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 - Strict-Transport-Security: - - max-age=31536000; includeSubDomains; preload - Referrer-Policy: - - no-referrer Access-Control-Allow-Origin: - "*" X-Via: - - haproxy-www-1j27 + - haproxy-www-ffos X-Cache: - Miss from cloudfront Via: - - 1.1 324a68a6c25ee50d774953f3e15a611d.cloudfront.net (CloudFront) + - 1.1 caf6806821bc479b28a6f1ce3043b8a6.cloudfront.net (CloudFront) X-Amz-Cf-Pop: - SEA19-C2 X-Amz-Cf-Id: - - mMBcyOQMIBd-UD9AfnSLu9jIXh98s5kVPdFBrMt3pK1BW-7cdMLOJA== + - "-JAjFakDF0XSTwrxnf7j5F60l5-zE8ZINHCfsL7RtAo-zArXemHtJg==" body: encoding: ASCII-8BIT - string: '{"ok":true,"channels":[{"id":"CRNUDTRQS","name":"everything","is_channel":true,"is_group":false,"is_im":false,"created":1577251090,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"everything","is_shared":false,"parent_conversation":null,"creator":"US1N1DHGQ","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TS3HWCGMD"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"Everything - but work!","creator":"US3U562F8","last_set":1584078931},"purpose":{"value":"","creator":"","last_set":0},"previous_names":[],"num_members":2},{"id":"CRQ896WKD","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1577251089,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"US1N1DHGQ","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TS3HWCGMD"],"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":"US1N1DHGQ","last_set":1577251089},"purpose":{"value":"This - channel is for workspace-wide communication and announcements. All members - are in this channel.","creator":"US1N1DHGQ","last_set":1577251089},"previous_names":[],"num_members":2},{"id":"CS3U4UHC6","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1577251089,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"US1N1DHGQ","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TS3HWCGMD"],"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":"US1N1DHGQ","last_set":1577251089},"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":"US1N1DHGQ","last_set":1577251089},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' + string: '{"ok":false,"error":"unknown_method","req_method":"bogus.endpoint"}' http_version: null - recorded_at: Sun, 15 Mar 2020 04:54:41 GMT + recorded_at: Mon, 16 Mar 2020 04:43:36 GMT - request: method: get - uri: https://slack.com/api/bogus.endpoint?token= + uri: https://slack.com/api/conversations.list?token= body: encoding: US-ASCII string: '' @@ -102,47 +85,64 @@ http_interactions: Content-Type: - application/json; charset=utf-8 Content-Length: - - '80' + - '646' Connection: - keep-alive Date: - - Sun, 15 Mar 2020 04:54:41 GMT + - Mon, 16 Mar 2020 04:43:36 GMT Server: - Apache - 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 - Referrer-Policy: - - no-referrer - X-Slack-Backend: - - h + X-Slack-Req-Id: + - d78a8cfef68b064cb8b1b57ccf04bcc5 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read Access-Control-Expose-Headers: - x-slack-req-id, retry-after - Vary: - - Accept-Encoding + X-Slack-Backend: + - r X-Content-Type-Options: - nosniff - X-Slack-Req-Id: - - 1d2b4f1379c8496b469a2cbbbe579586 + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate X-Xss-Protection: - '0' + Vary: + - Accept-Encoding + Pragma: + - no-cache + 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 + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer Access-Control-Allow-Origin: - "*" X-Via: - - haproxy-www-ml25 + - haproxy-www-69ma X-Cache: - Miss from cloudfront Via: - - 1.1 61bc723adb3b1884ed759711e84e13a9.cloudfront.net (CloudFront) + - 1.1 2bedbeaa49b4a77447d30097858cb81a.cloudfront.net (CloudFront) X-Amz-Cf-Pop: - SEA19-C2 X-Amz-Cf-Id: - - eB8zPDDittCPESR1QEcRATVLjU3gImw38xNiurcq_R55V-AnfI_Ggg== + - oV1N-J8QQAIYXuE99oZ-rDBPOk1CsBhaUs3aorGovXy725UsOJV7lg== body: encoding: ASCII-8BIT - string: '{"ok":false,"error":"unknown_method","req_method":"bogus.endpoint"}' + string: '{"ok":true,"channels":[{"id":"CRNUDTRQS","name":"everything","is_channel":true,"is_group":false,"is_im":false,"created":1577251090,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"everything","is_shared":false,"parent_conversation":null,"creator":"US1N1DHGQ","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TS3HWCGMD"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"Everything + but work!","creator":"US3U562F8","last_set":1584078931},"purpose":{"value":"","creator":"","last_set":0},"previous_names":[],"num_members":2},{"id":"CRQ896WKD","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1577251089,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"US1N1DHGQ","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TS3HWCGMD"],"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":"US1N1DHGQ","last_set":1577251089},"purpose":{"value":"This + channel is for workspace-wide communication and announcements. All members + are in this channel.","creator":"US1N1DHGQ","last_set":1577251089},"previous_names":[],"num_members":2},{"id":"CS3U4UHC6","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1577251089,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"US1N1DHGQ","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TS3HWCGMD"],"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":"US1N1DHGQ","last_set":1577251089},"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":"US1N1DHGQ","last_set":1577251089},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' http_version: null - recorded_at: Sun, 15 Mar 2020 04:54:41 GMT + recorded_at: Mon, 16 Mar 2020 04:43:36 GMT recorded_with: VCR 5.1.0 diff --git a/test/cassettes/create_workspace.yml b/test/cassettes/create_workspace.yml index 53fee553..122fa876 100644 --- a/test/cassettes/create_workspace.yml +++ b/test/cassettes/create_workspace.yml @@ -25,11 +25,11 @@ http_interactions: Connection: - keep-alive Date: - - Mon, 16 Mar 2020 01:18:34 GMT + - Mon, 16 Mar 2020 05:32:01 GMT Server: - Apache X-Slack-Req-Id: - - d0fed5b83d4c88ad41d724ac6e821f95 + - 708290548b97afb41c8dcfe3274f88a0 X-Oauth-Scopes: - identify,channels:read,users:read,chat:write X-Accepted-Oauth-Scopes: @@ -60,15 +60,15 @@ http_interactions: Access-Control-Allow-Origin: - "*" X-Via: - - haproxy-www-huvv + - haproxy-www-q9vr X-Cache: - Miss from cloudfront Via: - - 1.1 d6b180eb367f7de26d67a9f3901b96a6.cloudfront.net (CloudFront) + - 1.1 174acb08636ac7d9e9a778bbf1bcbc53.cloudfront.net (CloudFront) X-Amz-Cf-Pop: - - SEA19-C2 + - SEA19-C1 X-Amz-Cf-Id: - - vQESKHhwP2vGcsGBXRC2KbU-l2_f7pVB0Tyet2U9z7_slA0waW-WFQ== + - 4jbUBOYmcw-2-QPwgzQLEsRvY2S9R4g67tYOT5PbC57OhXPtBuq9Qw== body: encoding: ASCII-8BIT string: '{"ok":true,"channels":[{"id":"CRNUDTRQS","name":"everything","is_channel":true,"is_group":false,"is_im":false,"created":1577251090,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"everything","is_shared":false,"parent_conversation":null,"creator":"US1N1DHGQ","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TS3HWCGMD"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"Everything @@ -80,7 +80,7 @@ http_interactions: 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":"US1N1DHGQ","last_set":1577251089},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' http_version: null - recorded_at: Mon, 16 Mar 2020 01:18:34 GMT + recorded_at: Mon, 16 Mar 2020 05:32:01 GMT - request: method: get uri: https://slack.com/api/users.list?token= @@ -106,11 +106,11 @@ http_interactions: Connection: - keep-alive Date: - - Mon, 16 Mar 2020 01:18:34 GMT + - Mon, 16 Mar 2020 05:32:01 GMT Server: - Apache X-Slack-Req-Id: - - 24bac37b814ce3ec41078d0aa03a8831 + - e07c66bc0c5150e7386e3983b7f22670 X-Oauth-Scopes: - identify,channels:read,users:read,chat:write X-Accepted-Oauth-Scopes: @@ -141,15 +141,15 @@ http_interactions: Access-Control-Allow-Origin: - "*" X-Via: - - haproxy-www-v5bn + - haproxy-www-y3hd X-Cache: - Miss from cloudfront Via: - - 1.1 e36ab1b8726f47aa5adc8e19e66d1bbe.cloudfront.net (CloudFront) + - 1.1 0cf6c59c77f0fff670ae085179adc459.cloudfront.net (CloudFront) X-Amz-Cf-Pop: - - SEA19-C2 + - SEA19-C1 X-Amz-Cf-Id: - - fRqQwB8CmWwMM2CfUwbnp2gmFEOrs5PC_o3Tj1--s_H9rICtFwI1Rw== + - PkS9zehmsB9lXow1U5j9Bes8EVxu-3rCLSWKRskHPB4K6u5z7Vv4mw== body: encoding: ASCII-8BIT string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"TS3HWCGMD","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":null,"tz_label":"Pacific @@ -158,7 +158,7 @@ http_interactions: Cheung","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Sharon Cheung","real_name_normalized":"Sharon Cheung","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"c2c34f19a48a","image_original":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_original.jpg","is_custom_image":true,"image_24":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_24.jpg","image_32":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_32.jpg","image_48":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_48.jpg","image_72":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_72.jpg","image_192":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_192.jpg","image_512":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_512.jpg","image_1024":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_1024.jpg","status_text_canonical":"","team":"TS3HWCGMD"},"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":1584071583,"has_2fa":false},{"id":"U01031BGYK0","team_id":"TS3HWCGMD","name":"oscarapi","deleted":false,"color":"e7392d","real_name":"API BOT","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"API - BOT","real_name_normalized":"API BOT","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g9a00fb2c827","api_app_id":"AUVV4G666","always_active":true,"bot_id":"BV21DTJN6","first_name":"API","last_name":"BOT","image_24":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-512.png","status_text_canonical":"","team":"TS3HWCGMD"},"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":1584234381}],"cache_ts":1584321514,"response_metadata":{"next_cursor":""}}' + BOT","real_name_normalized":"API BOT","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g9a00fb2c827","api_app_id":"AUVV4G666","always_active":true,"bot_id":"BV21DTJN6","first_name":"API","last_name":"BOT","image_24":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-512.png","status_text_canonical":"","team":"TS3HWCGMD"},"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":1584234381}],"cache_ts":1584336721,"response_metadata":{"next_cursor":""}}' http_version: null - recorded_at: Mon, 16 Mar 2020 01:18:34 GMT + recorded_at: Mon, 16 Mar 2020 05:32:01 GMT recorded_with: VCR 5.1.0 diff --git a/test/cassettes/users-list-endpoint.yml b/test/cassettes/users-list-endpoint.yml index e4451671..e4e52605 100644 --- a/test/cassettes/users-list-endpoint.yml +++ b/test/cassettes/users-list-endpoint.yml @@ -25,11 +25,11 @@ http_interactions: Connection: - keep-alive Date: - - Sun, 15 Mar 2020 04:54:41 GMT + - Mon, 16 Mar 2020 04:43:56 GMT Server: - Apache X-Slack-Req-Id: - - 8d585781d48766d6332abeef21852e57 + - f4bd2f948d70f0fd247ef383c2d738ed X-Oauth-Scopes: - identify,channels:read,users:read,chat:write X-Accepted-Oauth-Scopes: @@ -60,15 +60,15 @@ http_interactions: Access-Control-Allow-Origin: - "*" X-Via: - - haproxy-www-60pe + - haproxy-www-9k48 X-Cache: - Miss from cloudfront Via: - - 1.1 4c7c693b007dfce603c83f138e31bccb.cloudfront.net (CloudFront) + - 1.1 591683988172c7980c4ebb318cbf18a9.cloudfront.net (CloudFront) X-Amz-Cf-Pop: - SEA19-C2 X-Amz-Cf-Id: - - MiKAQw-9wIqvei6YhZRzOJ-C0XXOTR4MCBaoVN0olU6z2yopXjsafQ== + - ileyoua5VRzPsefMq1RhuhvJUdO4wYHdk821eC74vf4lkeAEmAz57A== body: encoding: ASCII-8BIT string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"TS3HWCGMD","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":null,"tz_label":"Pacific @@ -77,9 +77,9 @@ http_interactions: Cheung","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Sharon Cheung","real_name_normalized":"Sharon Cheung","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"c2c34f19a48a","image_original":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_original.jpg","is_custom_image":true,"image_24":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_24.jpg","image_32":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_32.jpg","image_48":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_48.jpg","image_72":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_72.jpg","image_192":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_192.jpg","image_512":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_512.jpg","image_1024":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_1024.jpg","status_text_canonical":"","team":"TS3HWCGMD"},"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":1584071583,"has_2fa":false},{"id":"U01031BGYK0","team_id":"TS3HWCGMD","name":"oscarapi","deleted":false,"color":"e7392d","real_name":"API BOT","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"API - BOT","real_name_normalized":"API BOT","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g9a00fb2c827","api_app_id":"AUVV4G666","always_active":true,"bot_id":"BV21DTJN6","first_name":"API","last_name":"BOT","image_24":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-512.png","status_text_canonical":"","team":"TS3HWCGMD"},"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":1584234381}],"cache_ts":1584248081,"response_metadata":{"next_cursor":""}}' + BOT","real_name_normalized":"API BOT","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g9a00fb2c827","api_app_id":"AUVV4G666","always_active":true,"bot_id":"BV21DTJN6","first_name":"API","last_name":"BOT","image_24":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-512.png","status_text_canonical":"","team":"TS3HWCGMD"},"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":1584234381}],"cache_ts":1584333836,"response_metadata":{"next_cursor":""}}' http_version: null - recorded_at: Sun, 15 Mar 2020 04:54:41 GMT + recorded_at: Mon, 16 Mar 2020 04:43:56 GMT - request: method: get uri: https://slack.com/api/bogus.endpoint?token= @@ -105,7 +105,7 @@ http_interactions: Connection: - keep-alive Date: - - Sun, 15 Mar 2020 04:54:41 GMT + - Mon, 16 Mar 2020 04:43:56 GMT Server: - Apache Strict-Transport-Security: @@ -124,105 +124,24 @@ http_interactions: X-Content-Type-Options: - nosniff X-Slack-Req-Id: - - c342795a254c03d7cc405e4e4de1efac + - b2f67792aecc7c4abbe6fb43ebffdcb8 X-Xss-Protection: - '0' Access-Control-Allow-Origin: - "*" X-Via: - - haproxy-www-xy81 + - haproxy-www-huvv X-Cache: - Miss from cloudfront Via: - - 1.1 943c6a4d4ee43b18ee91634536f53eae.cloudfront.net (CloudFront) + - 1.1 12a392bc3a7281f8d5d4591bfadc41fc.cloudfront.net (CloudFront) X-Amz-Cf-Pop: - SEA19-C2 X-Amz-Cf-Id: - - g-un9RLd4HBN4BHv67aS3cPSdoE0ECJC4fpqu6ycHzNzs--OB3xnBA== + - 75gcHJdh_cJsJda_KPZZbZh21kyOq-dKAFVE1ZA45eJEu4oSYq2EKw== body: encoding: ASCII-8BIT string: '{"ok":false,"error":"unknown_method","req_method":"bogus.endpoint"}' http_version: null - recorded_at: Sun, 15 Mar 2020 04:54:41 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: - - '646' - Connection: - - keep-alive - Date: - - Mon, 16 Mar 2020 00:46:59 GMT - Server: - - Apache - X-Slack-Req-Id: - - e32346168eaf85567b4305a842cece53 - X-Oauth-Scopes: - - identify,channels:read,users:read,chat:write - X-Accepted-Oauth-Scopes: - - channels:read,groups:read,mpim:read,im:read,read - Access-Control-Expose-Headers: - - x-slack-req-id, retry-after - X-Slack-Backend: - - h - 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' - Vary: - - Accept-Encoding - Pragma: - - no-cache - 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 - Strict-Transport-Security: - - max-age=31536000; includeSubDomains; preload - Referrer-Policy: - - no-referrer - Access-Control-Allow-Origin: - - "*" - X-Via: - - haproxy-www-exg7 - X-Cache: - - Miss from cloudfront - Via: - - 1.1 0bb842bd5868b86440983b936bb0adef.cloudfront.net (CloudFront) - X-Amz-Cf-Pop: - - SEA19-C1 - X-Amz-Cf-Id: - - MrHyoxAJL1sUsETGNgVauatZrax0hF3k88pmXDhxDKU8XltpPWwvOw== - body: - encoding: ASCII-8BIT - string: '{"ok":true,"channels":[{"id":"CRNUDTRQS","name":"everything","is_channel":true,"is_group":false,"is_im":false,"created":1577251090,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"everything","is_shared":false,"parent_conversation":null,"creator":"US1N1DHGQ","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TS3HWCGMD"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"Everything - but work!","creator":"US3U562F8","last_set":1584078931},"purpose":{"value":"","creator":"","last_set":0},"previous_names":[],"num_members":2},{"id":"CRQ896WKD","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1577251089,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"US1N1DHGQ","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TS3HWCGMD"],"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":"US1N1DHGQ","last_set":1577251089},"purpose":{"value":"This - channel is for workspace-wide communication and announcements. All members - are in this channel.","creator":"US1N1DHGQ","last_set":1577251089},"previous_names":[],"num_members":2},{"id":"CS3U4UHC6","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1577251089,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"US1N1DHGQ","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TS3HWCGMD"],"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":"US1N1DHGQ","last_set":1577251089},"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":"US1N1DHGQ","last_set":1577251089},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' - http_version: null - recorded_at: Mon, 16 Mar 2020 00:46:59 GMT + recorded_at: Mon, 16 Mar 2020 04:43:56 GMT recorded_with: VCR 5.1.0 diff --git a/test/channel_test.rb b/test/channel_test.rb index 2fa4ca92..254c18d2 100644 --- a/test/channel_test.rb +++ b/test/channel_test.rb @@ -29,7 +29,7 @@ end expect(result).must_be_kind_of Array - expect(result.length).must_be :>, 0 + expect(result.length).must_be :>, 0 result.each do |channel| expect(channel).must_be_kind_of Channel end diff --git a/test/workspace_test.rb b/test/workspace_test.rb index 3c80d876..934127ce 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -31,6 +31,12 @@ expect(@workspace.selected).must_be_instance_of Channel expect(@workspace.selected.name).must_equal "random" end + + it "will return nil if a channel provided isn't valid" do + @workspace.select_channel("nothing found here") + expect(@workspace.selected).must_be_nil + end + end describe "select_channel(channel_name)" do @@ -55,9 +61,15 @@ end it "will return an instance of User based on the user input" do - @workspace.select_user("Joseph") + @workspace.select_user("Sharon Cheung") + puts @workspace.selected expect(@workspace.selected).must_be_instance_of User - expect(@workspace.selected.real_name).must_equal "Joseph" + expect(@workspace.selected.real_name).must_equal "Sharon Cheung" + end + + it "will return nil if an user provided isn't valid" do + @workspace.select_user("nothing found here") + expect(@workspace.selected).must_be_nil end end end From 5dd68f2a6c6a9271682d7c27aece31adfa438ca0 Mon Sep 17 00:00:00 2001 From: Sharon Cheung Date: Mon, 16 Mar 2020 02:04:01 -0700 Subject: [PATCH 14/25] moved send_message method to recipient.rb instead --- lib/recipient.rb | 17 ++++++++++++----- lib/workspace.rb | 13 ++++++++----- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/lib/recipient.rb b/lib/recipient.rb index 924d2510..1da243f4 100644 --- a/lib/recipient.rb +++ b/lib/recipient.rb @@ -24,10 +24,6 @@ def details raise NotImplementedError, "Define this method in a child class" end - def send_message(message) - - end - def self.get(url) data = HTTParty.get(url, query: { token: ENV["SLACK_API_TOKEN"]}) @@ -42,7 +38,18 @@ def self.get(url) def self.list_all raise NotImplementedError, "Define this method in a child class" end -end + + def send_message(message) + HTTParty.post("https://slack.com/api/chat.postMessage", query: { + token: ENV["SLACK_API_TOKEN"], + channel: self.slack_id, + text: message + } + ) + end + + class SlackAPIError < Exception + end end diff --git a/lib/workspace.rb b/lib/workspace.rb index 6b7fe28b..642d74f9 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -35,6 +35,7 @@ def select_user(user_name) @users.each do |user| if user.real_name == user_name @selected = user + puts "You have selected #{user.real_name}" break elsif user.slack_id == user_name @selected = user @@ -58,12 +59,14 @@ def show_details end def send_message(message) - url = "https://slack.com/api/chat.postMessage" + @selected.send_message(message) +=begin + url = "https://slack.com/api/chat.postMessage" if @selected.class == Channel - HTTParty.post(url , query: {token: ENV["SLACK_API_TOKEN"], channel: @selected.name, text: message}) + HTTParty.post(url , query: {token: ENV["SLACK_API_TOKEN"], channel: @selected.slack_id, text: message}) elsif @selected.class == User - HTTParty.post(url , query: {token: ENV["SLACK_API_TOKEN"], channel: "@#{@selected.name}", text: message}) + HTTParty.post(url , query: {token: ENV["SLACK_API_TOKEN"], channel: @selected.slack_id, text: message}) end - end - +=end + end end \ No newline at end of file From 4ec0dd70cd35a6788ed78b0d79656cbec600944a Mon Sep 17 00:00:00 2001 From: Sharon Cheung Date: Mon, 16 Mar 2020 02:37:36 -0700 Subject: [PATCH 15/25] refactoring select_user/ select_channel method --- lib/recipient.rb | 4 +--- lib/slack.rb | 3 ++- lib/workspace.rb | 21 +++++---------------- 3 files changed, 8 insertions(+), 20 deletions(-) diff --git a/lib/recipient.rb b/lib/recipient.rb index 1da243f4..0fe6c792 100644 --- a/lib/recipient.rb +++ b/lib/recipient.rb @@ -47,9 +47,7 @@ def send_message(message) } ) end - - +end class SlackAPIError < Exception - end end diff --git a/lib/slack.rb b/lib/slack.rb index 5dc268ca..4988ebc0 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -69,7 +69,8 @@ def main end def prompt_for_input - print "Please choose an option: \n list users, \n list channels, \n select user, \n select channel, \n details, \n send message, \n or quit: \n" + print "Please choose an option: \n - list users \n - list channels \n - select user \n - select channel \n - details \n - send message \n or quit \n" + puts "--------------------------------------------" return gets.chomp.downcase end diff --git a/lib/workspace.rb b/lib/workspace.rb index 642d74f9..37ac5de7 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -12,16 +12,15 @@ class Workspace def initialize @channels = Channel.list_all @users = User.list_all - @selected = nil + @selected = "" end def select_channel(channel_name) @channels.each do |channel| - if (channel.name) == channel_name + if channel.name == channel_name || channel.slack_id == channel_name @selected = channel + puts "\n You have selected #{channel.name}" break - elsif (channel.slack_id) == channel_name - @selected = channel else @selected = nil end @@ -33,12 +32,10 @@ def select_channel(channel_name) def select_user(user_name) @users.each do |user| - if user.real_name == user_name + if user.real_name == user_name || user.slack_id == user_name @selected = user - puts "You have selected #{user.real_name}" + puts "\n You have selected #{user.real_name}" break - elsif user.slack_id == user_name - @selected = user else @selected = nil end @@ -60,13 +57,5 @@ def show_details def send_message(message) @selected.send_message(message) -=begin - url = "https://slack.com/api/chat.postMessage" - if @selected.class == Channel - HTTParty.post(url , query: {token: ENV["SLACK_API_TOKEN"], channel: @selected.slack_id, text: message}) - elsif @selected.class == User - HTTParty.post(url , query: {token: ENV["SLACK_API_TOKEN"], channel: @selected.slack_id, text: message}) - end -=end end end \ No newline at end of file From 8bffb1f71466971fae1758b2cba4eb0ca367b145 Mon Sep 17 00:00:00 2001 From: Sharon Cheung Date: Mon, 16 Mar 2020 02:43:29 -0700 Subject: [PATCH 16/25] improving command line interface --- lib/slack.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/slack.rb b/lib/slack.rb index 4988ebc0..eb8c0fb5 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -10,7 +10,7 @@ def main workspace = Workspace.new puts "\n" - puts "Welcome to the Ada Slack CLI! This Slack workspace currently has #{workspace.users.count} users and #{workspace.channels.count} channels." + puts "Welcome to the Ada Slack CLI! \n This Slack workspace currently has #{workspace.users.count} users and #{workspace.channels.count} channels." user_input = prompt_for_input From db4e1528a91b3572e06889b447e2464b264cba25 Mon Sep 17 00:00:00 2001 From: Sharon Cheung Date: Mon, 16 Mar 2020 03:04:08 -0700 Subject: [PATCH 17/25] added response check for send_message method --- lib/workspace.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/workspace.rb b/lib/workspace.rb index 37ac5de7..354264ef 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -56,6 +56,8 @@ def show_details end def send_message(message) - @selected.send_message(message) + response = @selected.send_message(message) + + return response.code == 200 && response.parsed_response["ok"] end end \ No newline at end of file From cd365d911afb2be318f29326eb2a3ce72e51a8a9 Mon Sep 17 00:00:00 2001 From: Sharon Cheung Date: Mon, 16 Mar 2020 03:44:15 -0700 Subject: [PATCH 18/25] added details / send_message test --- lib/workspace.rb | 1 - test/cassettes/create_workspace.yml | 74 +++++++++++++++++++++++++++++ test/workspace_test.rb | 62 +++++++++++++++++++++++- 3 files changed, 134 insertions(+), 3 deletions(-) diff --git a/lib/workspace.rb b/lib/workspace.rb index 354264ef..978c1dac 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -57,7 +57,6 @@ def show_details def send_message(message) response = @selected.send_message(message) - return response.code == 200 && response.parsed_response["ok"] end end \ No newline at end of file diff --git a/test/cassettes/create_workspace.yml b/test/cassettes/create_workspace.yml index 122fa876..cea628c1 100644 --- a/test/cassettes/create_workspace.yml +++ b/test/cassettes/create_workspace.yml @@ -161,4 +161,78 @@ http_interactions: BOT","real_name_normalized":"API BOT","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g9a00fb2c827","api_app_id":"AUVV4G666","always_active":true,"bot_id":"BV21DTJN6","first_name":"API","last_name":"BOT","image_24":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-512.png","status_text_canonical":"","team":"TS3HWCGMD"},"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":1584234381}],"cache_ts":1584336721,"response_metadata":{"next_cursor":""}}' http_version: null recorded_at: Mon, 16 Mar 2020 05:32:01 GMT +- request: + method: post + uri: https://slack.com/api/chat.postMessage?channel=US1N1DHGQ&text=Hello&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: + - '319' + Connection: + - keep-alive + Date: + - Mon, 16 Mar 2020 10:31:09 GMT + Server: + - Apache + X-Slack-Req-Id: + - a9db58266b8ff6f3b446e67af27420e9 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write + X-Accepted-Oauth-Scopes: + - chat:write + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Slack-Backend: + - h + 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' + Vary: + - Accept-Encoding + Pragma: + - no-cache + 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 + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-4usq + X-Cache: + - Miss from cloudfront + Via: + - 1.1 981753271eb5b6d11bc29d52f173a5da.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - seGAtUMVOKkRmT1I35pBhbWIsLiRpQkzMJ-kEjjwccTVKU2KwdwC9A== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channel":"DRRETUX17","ts":"1584354669.009600","message":{"bot_id":"BUYLK8X8R","type":"message","text":"Hello","user":"US3U562F8","ts":"1584354669.009600","team":"TS3HWCGMD","bot_profile":{"id":"BUYLK8X8R","deleted":false,"name":"OSCAR-API","updated":1583963468,"app_id":"AUVV4G666","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":"TS3HWCGMD"}}}' + http_version: null + recorded_at: Mon, 16 Mar 2020 10:31:09 GMT recorded_with: VCR 5.1.0 diff --git a/test/workspace_test.rb b/test/workspace_test.rb index 934127ce..85f60d19 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -46,11 +46,18 @@ end end - it "will return a Channel based on the user input" do + it "will return a Channel based on the user input - using channel name" do @workspace.select_channel("random") expect(@workspace.selected).must_be_instance_of Channel expect(@workspace.selected.name).must_equal "random" end + + + it "will return a Channel based on the user input - using channel name" do + @workspace.select_channel("CRQ896WKD") + expect(@workspace.selected).must_be_instance_of Channel + expect(@workspace.selected.name).must_equal "general" + end end describe "select_user(user_name)" do @@ -62,15 +69,66 @@ it "will return an instance of User based on the user input" do @workspace.select_user("Sharon Cheung") - puts @workspace.selected expect(@workspace.selected).must_be_instance_of User expect(@workspace.selected.real_name).must_equal "Sharon Cheung" end + it "will return an instance of User based on the user input" do + @workspace.select_user("US1N1DHGQ") + expect(@workspace.selected).must_be_instance_of User + expect(@workspace.selected.real_name).must_equal "Joseph" + end + it "will return nil if an user provided isn't valid" do @workspace.select_user("nothing found here") expect(@workspace.selected).must_be_nil end + + end + + describe "show_details" do + before do + VCR.use_cassette("create_workspace")do + @workspace = Workspace.new + end + end + + + it " will return a user details" do + @workspace.select_user("Joseph") + user_details = @workspace.show_details + + expect(user_details).must_be_kind_of String + expect(user_details).must_equal "Class name = Joseph, name = nguyen.josephduy, slack id = US1N1DHGQ" + end + + it "will return a channel details" do + @workspace.select_channel('general') + channel_details = @workspace.show_details + + expect(channel_details).must_be_kind_of String + expect(channel_details).must_equal "Channel name = general, topic = Company-wide announcements and work-based matters, memeber count = 2, slack id = CRQ896WKD" + end + end + + describe "send_message(message)" do + before do + VCR.use_cassette("create_workspace")do + @workspace = Workspace.new + end + end + + it "will return true when the message go thru when a valid user/channel input" do + message_sent = + VCR.use_cassette("create_workspace") do + @workspace.select_user('Joseph') + message_sent = @workspace.send_message("Hello") + end + + expect(message_sent).must_be_kind_of TrueClass + end end + + end From 9b37e92066eb3db0279a121bddda6debc105f8c1 Mon Sep 17 00:00:00 2001 From: Sharon Cheung Date: Mon, 16 Mar 2020 10:10:46 -0700 Subject: [PATCH 19/25] small change --- lib/workspace.rb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/workspace.rb b/lib/workspace.rb index 978c1dac..9082a94e 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -59,4 +59,9 @@ def send_message(message) response = @selected.send_message(message) return response.code == 200 && response.parsed_response["ok"] end + + def get_conversation_his + response = @selected.check_conversation_his + return response.code == 200 && response.parsed_response["ok"] + end end \ No newline at end of file From 63102f2e8cccee3478f02338086f73cac328bec2 Mon Sep 17 00:00:00 2001 From: Sharon Cheung Date: Mon, 16 Mar 2020 10:14:14 -0700 Subject: [PATCH 20/25] added small changes --- lib/workspace.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/workspace.rb b/lib/workspace.rb index 9082a94e..b262f490 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -32,7 +32,7 @@ def select_channel(channel_name) def select_user(user_name) @users.each do |user| - if user.real_name == user_name || user.slack_id == user_name + if user.real_name == user_name || user.slack_id == user_name || user.name == user_name @selected = user puts "\n You have selected #{user.real_name}" break From 0721995f442a446bfc69a2c33f7729bbeefb02dc Mon Sep 17 00:00:00 2001 From: Sharon Cheung Date: Sun, 22 Mar 2020 20:50:10 -0700 Subject: [PATCH 21/25] added update bot setting - name & emoji --- bot-settings.json | 0 lib/recipient.rb | 32 ++++++++++++++++++++++++++++++-- lib/slack.rb | 17 +++++++++++++++-- lib/workspace.rb | 12 ++++++++++-- 4 files changed, 55 insertions(+), 6 deletions(-) create mode 100644 bot-settings.json diff --git a/bot-settings.json b/bot-settings.json new file mode 100644 index 00000000..e69de29b diff --git a/lib/recipient.rb b/lib/recipient.rb index 0fe6c792..74c780eb 100644 --- a/lib/recipient.rb +++ b/lib/recipient.rb @@ -45,9 +45,37 @@ def send_message(message) channel: self.slack_id, text: message } - ) + ) + end + + def set_user_profile_name(name) + HTTParty.post("https://slack.com/api/users.profile.set?", query: { + token: ENV["SLACK_API_TOKEN"], + profile: {display_name: name}.to_json, + user: self.slack_id, + } + ) + + #File.open("bot-settings.json", "w") do |name| + # name.write(query.to_json) + #end + end + + def set_user_profile_emoji(emoji) + HTTParty.post("https://slack.com/api/users.profile.set?", query: { + token: ENV["SLACK_API_TOKEN"], + profile: {status_emoji: emoji}.to_json, + user: self.slack_id, + } + ) + #File.open("bot-settings.json", "w") do |emoji| + # emoji.write(query.to_json) + #end end end + + + class SlackAPIError < Exception -end +end \ No newline at end of file diff --git a/lib/slack.rb b/lib/slack.rb index eb8c0fb5..a6cc6a8e 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -3,7 +3,7 @@ require "dotenv" require "httparty" -require_relative 'workspace' +require_relative './workspace' Dotenv.load @@ -64,6 +64,8 @@ def main user_input = prompt_for_input end + + puts "Thank you for using the ADA Slack CLI!" puts "\n" end @@ -74,4 +76,15 @@ def prompt_for_input return gets.chomp.downcase end -main if __FILE__ == $PROGRAM_NAME \ No newline at end of file + +main if __FILE__ == $PROGRAM_NAME + + +##### TODO - to add command line options for set profile name +##### TODO - to add command line options for set profile emoji + +#When I change these settings, the program should save them in the JSON format in a file named bot-settings.json. +#When I restart the program, it should reload those settings. + +#As a user, I can see a history of messages sent to the currently selected recipient. +# If I change recipients, the message list should also change \ No newline at end of file diff --git a/lib/workspace.rb b/lib/workspace.rb index b262f490..33d57e7a 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -60,8 +60,16 @@ def send_message(message) return response.code == 200 && response.parsed_response["ok"] end - def get_conversation_his - response = @selected.check_conversation_his + def set_profile_name(name) + response = @selected.set_user_profile_name(name) return response.code == 200 && response.parsed_response["ok"] end + + def set_profile_emoji(emoji) + response = @selected.set_user_profile_emoji(emoji) + return response.code == 200 && response.parsed_response["ok"] + end + + + end \ No newline at end of file From c561263e0617c85f896ba0de32c2cefa0a320f7c Mon Sep 17 00:00:00 2001 From: Sharon Cheung Date: Wed, 25 Mar 2020 22:14:27 -0700 Subject: [PATCH 22/25] added update user setting method --- bot-settings.json | 1 + lib/recipient.rb | 30 +++++++++++----------------- lib/slack.rb | 45 +++++++++++++++++++++++++++++------------- lib/user.rb | 2 +- lib/workspace.rb | 16 +++++---------- test/workspace_test.rb | 8 ++++---- 6 files changed, 54 insertions(+), 48 deletions(-) diff --git a/bot-settings.json b/bot-settings.json index e69de29b..140cce84 100644 --- a/bot-settings.json +++ b/bot-settings.json @@ -0,0 +1 @@ +{"token":"xoxp-887608424727-887957206518-996645543335-37e6dc6198679681496f88d08b6299b4","profile":"{\"display_name\":\"POP\",\"status_emoji\":\":cloud:\"}","user":"US1N1DHGQ"} \ No newline at end of file diff --git a/lib/recipient.rb b/lib/recipient.rb index 74c780eb..3ea0cc94 100644 --- a/lib/recipient.rb +++ b/lib/recipient.rb @@ -48,29 +48,23 @@ def send_message(message) ) end - def set_user_profile_name(name) - HTTParty.post("https://slack.com/api/users.profile.set?", query: { + def set_user_profile_name(name, emoji) + query = { token: ENV["SLACK_API_TOKEN"], - profile: {display_name: name}.to_json, + profile: {display_name: name, status_emoji: emoji}.to_json, user: self.slack_id, } - ) - #File.open("bot-settings.json", "w") do |name| - # name.write(query.to_json) - #end - end + response = HTTParty.post("https://slack.com/api/users.profile.set?", query: query) - def set_user_profile_emoji(emoji) - HTTParty.post("https://slack.com/api/users.profile.set?", query: { - token: ENV["SLACK_API_TOKEN"], - profile: {status_emoji: emoji}.to_json, - user: self.slack_id, - } - ) - #File.open("bot-settings.json", "w") do |emoji| - # emoji.write(query.to_json) - #end + #Optional - + #When I change these settings, the program should save them in the JSON format in a file named bot-settings.json. + #When I restart the program, it should reload those settings. + File.open("./bot-settings.json", "w") do |name| + name.write(query.to_json) + end + + return response end end diff --git a/lib/slack.rb b/lib/slack.rb index a6cc6a8e..960b43a2 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -2,6 +2,7 @@ require 'table_print' require "dotenv" require "httparty" +require "colorize" require_relative './workspace' @@ -17,29 +18,29 @@ def main until user_input == "quit" || user_input == "exit" case user_input - when "list users" - tp workspace.users, "slack_id", "name", "real_name" + when "list users" + tp workspace.users, "slack_id", "name", "real_name" puts "\n" when "list channels" - tp workspace.channels, "name", "topic", "member_count", "slack_id" + tp workspace.channels, "name", "topic", "memeber_count", "slack_id" puts "\n" when "select user" - print "Please enter the user name or ID: " + print "Please enter the user name or ID: ".bold user_name = gets.chomp.to_s workspace.select_user(user_name) puts "\n" when "select channel" - print "\n Please enter the channel name or ID: " + print "\n Please enter the channel name or ID: ".bold channel_name = gets.chomp.to_s workspace.select_channel(channel_name) puts "\n" when "details" if workspace.selected == "" - puts "\nYou haven't selected a user or channel!!! Try again!" + puts "\nYou haven't selected a user or channel!!! Try again!".bold puts "\n" else puts workspace.show_details @@ -49,7 +50,7 @@ def main when "send message" if workspace.selected == "" - puts "\nYou haven't selected a user or channel!!! Try again!" + puts "\nYou haven't selected a user or channel!!! Try again!".bold puts "\n" else print "Please enter your message: " @@ -57,8 +58,29 @@ def main workspace.send_message(message) puts "\n" end + + #Optional - can change global settings for the program include the username for the bot and an emoji to use as an icon + + when "update user profile setting" + if workspace.selected.class != User + puts "\nYou would need to select your own user id first, maybe try again?".bold + puts "\n" + else + print "\n enter the name that you would like to change your profile name to:".bold + new_name = gets.chomp.to_s + + print "\n enter the emoji you would like to use" + new_emoji = gets.chomp.to_s + workspace.set_profile_setting(new_name, new_emoji) + if workspace.set_profile_setting(new_name, new_emoji) + puts "\n Your profile has been successfully updated!".blue + else + puts "\n It didn't go thru, you might not be authorized to change their profile. Sorry :(".cyan.on_blue.bold + end + end + else - puts "Sorry, I didn't understand your request. Please try again." + puts "Sorry, I didn't understand your request. Please try again.".yellow.bold puts "\n" end @@ -71,7 +93,7 @@ def main end def prompt_for_input - print "Please choose an option: \n - list users \n - list channels \n - select user \n - select channel \n - details \n - send message \n or quit \n" + print "Please choose an option: \n - list users \n - list channels \n - select user \n - select channel \n - details \n - send message \n - update user profile setting \nor quit \n" puts "--------------------------------------------" return gets.chomp.downcase end @@ -80,11 +102,6 @@ def prompt_for_input main if __FILE__ == $PROGRAM_NAME -##### TODO - to add command line options for set profile name -##### TODO - to add command line options for set profile emoji - -#When I change these settings, the program should save them in the JSON format in a file named bot-settings.json. -#When I restart the program, it should reload those settings. #As a user, I can see a history of messages sent to the currently selected recipient. # If I change recipients, the message list should also change \ No newline at end of file diff --git a/lib/user.rb b/lib/user.rb index e1d1b9c0..7e7ee3f6 100644 --- a/lib/user.rb +++ b/lib/user.rb @@ -19,7 +19,7 @@ def initialize(real_name: , status_text: , status_emoji: , name: , slack_id: ) end def detail - tp self, "slack_id", "name", "real_name" + tp self, "slack_id", "name", "real_name","status_emoji" end def self.list_all diff --git a/lib/workspace.rb b/lib/workspace.rb index 33d57e7a..8fa4f20b 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -2,6 +2,7 @@ require "dotenv" require_relative "user" require_relative "channel" +require 'table_print' Dotenv.load @@ -48,10 +49,10 @@ def select_user(user_name) def show_details if @selected.class == Channel - return "Channel name = #{@selected.name}, topic = #{@selected.topic}, memeber count = #{@selected.memeber_count}, slack id = #{@selected.slack_id}" + tp @selected, "name", "topic", "memeber_count", "slack_id" elsif @selected.class == User - return "Class name = #{@selected.real_name}, name = #{@selected.name}, slack id = #{@selected.slack_id}" + tp @selected, "slack_id", "name", "real_name","status_emoji" end end @@ -60,16 +61,9 @@ def send_message(message) return response.code == 200 && response.parsed_response["ok"] end - def set_profile_name(name) - response = @selected.set_user_profile_name(name) + def set_profile_setting(name, emoji) + response = @selected.set_user_profile_name(name, emoji) return response.code == 200 && response.parsed_response["ok"] end - def set_profile_emoji(emoji) - response = @selected.set_user_profile_emoji(emoji) - return response.code == 200 && response.parsed_response["ok"] - end - - - end \ No newline at end of file diff --git a/test/workspace_test.rb b/test/workspace_test.rb index 85f60d19..d8f8320e 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -98,16 +98,16 @@ @workspace.select_user("Joseph") user_details = @workspace.show_details - expect(user_details).must_be_kind_of String - expect(user_details).must_equal "Class name = Joseph, name = nguyen.josephduy, slack id = US1N1DHGQ" + expect(user_details).must_be_kind_of TablePrint::Returnable + #expect(user_details).must_equal "Class name = Joseph, name = nguyen.josephduy, slack id = US1N1DHGQ" end it "will return a channel details" do @workspace.select_channel('general') channel_details = @workspace.show_details - expect(channel_details).must_be_kind_of String - expect(channel_details).must_equal "Channel name = general, topic = Company-wide announcements and work-based matters, memeber count = 2, slack id = CRQ896WKD" + expect(channel_details).must_be_kind_of TablePrint::Returnable + #expect(channel_details).must_equal "Channel name = general, topic = Company-wide announcements and work-based matters, memeber count = 2, slack id = CRQ896WKD" end end From 28b377327c9e9183e260d39b4475df27ecea15d8 Mon Sep 17 00:00:00 2001 From: Sharon Cheung Date: Wed, 25 Mar 2020 23:30:09 -0700 Subject: [PATCH 23/25] cleaned up some codes --- lib/slack.rb | 4 ++-- lib/workspace.rb | 6 ++++-- test/workspace_test.rb | 4 ++-- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/lib/slack.rb b/lib/slack.rb index 960b43a2..3ecb3d19 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -19,7 +19,7 @@ def main case user_input when "list users" - tp workspace.users, "slack_id", "name", "real_name" + tp workspace.users, "slack_id", "name", "real_name", "status_emoji" puts "\n" when "list channels" @@ -43,7 +43,7 @@ def main puts "\nYou haven't selected a user or channel!!! Try again!".bold puts "\n" else - puts workspace.show_details + workspace.show_details user_input = nil puts "\n" end diff --git a/lib/workspace.rb b/lib/workspace.rb index 8fa4f20b..6b34d1fb 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -49,10 +49,12 @@ def select_user(user_name) def show_details if @selected.class == Channel - tp @selected, "name", "topic", "memeber_count", "slack_id" + return tp @selected, "name", "topic", "memeber_count", "slack_id" + puts "\n" elsif @selected.class == User - tp @selected, "slack_id", "name", "real_name","status_emoji" + return tp @selected, "slack_id", "name", "real_name","status_emoji" + puts "\n" end end diff --git a/test/workspace_test.rb b/test/workspace_test.rb index d8f8320e..1fff7e93 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -99,7 +99,7 @@ user_details = @workspace.show_details expect(user_details).must_be_kind_of TablePrint::Returnable - #expect(user_details).must_equal "Class name = Joseph, name = nguyen.josephduy, slack id = US1N1DHGQ" + end it "will return a channel details" do @@ -107,7 +107,7 @@ channel_details = @workspace.show_details expect(channel_details).must_be_kind_of TablePrint::Returnable - #expect(channel_details).must_equal "Channel name = general, topic = Company-wide announcements and work-based matters, memeber count = 2, slack id = CRQ896WKD" + end end From 3eeb6b44ed3c71fd841f9b209d73a75d11b70133 Mon Sep 17 00:00:00 2001 From: Sharon Cheung Date: Thu, 26 Mar 2020 00:40:25 -0700 Subject: [PATCH 24/25] final touch --- bot-settings.json | 2 +- lib/slack.rb | 5 +++ test/cassettes/create_workspace.yml | 56 +++++++++++++++-------------- test/workspace_test.rb | 14 ++++++++ 4 files changed, 49 insertions(+), 28 deletions(-) diff --git a/bot-settings.json b/bot-settings.json index 140cce84..847fb032 100644 --- a/bot-settings.json +++ b/bot-settings.json @@ -1 +1 @@ -{"token":"xoxp-887608424727-887957206518-996645543335-37e6dc6198679681496f88d08b6299b4","profile":"{\"display_name\":\"POP\",\"status_emoji\":\":cloud:\"}","user":"US1N1DHGQ"} \ No newline at end of file +{"token":"xoxp-887608424727-887957206518-996645543335-37e6dc6198679681496f88d08b6299b4","profile":"{\"display_name\":\"hello\",\"status_emoji\":\":hat:\"}","user":"US1N1DHGQ"} \ No newline at end of file diff --git a/lib/slack.rb b/lib/slack.rb index 3ecb3d19..aed278c6 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -56,6 +56,11 @@ def main print "Please enter your message: " message = gets.chomp.to_s workspace.send_message(message) + if workspace.send_message(message) + puts "Your message is sent".blue.bold + else + puts "Something is not right.... message is not sent!".blue.bold + end puts "\n" end diff --git a/test/cassettes/create_workspace.yml b/test/cassettes/create_workspace.yml index cea628c1..75637a2d 100644 --- a/test/cassettes/create_workspace.yml +++ b/test/cassettes/create_workspace.yml @@ -25,13 +25,13 @@ http_interactions: Connection: - keep-alive Date: - - Mon, 16 Mar 2020 05:32:01 GMT + - Thu, 26 Mar 2020 07:13:23 GMT Server: - Apache X-Slack-Req-Id: - - 708290548b97afb41c8dcfe3274f88a0 + - b4e55dca2b20176220686bd981d1cc7b X-Oauth-Scopes: - - identify,channels:read,users:read,chat:write + - identify,channels:history,groups:history,im:history,mpim:history,channels:read,users:read,users.profile:read,chat:write,users.profile:write X-Accepted-Oauth-Scopes: - channels:read,groups:read,mpim:read,im:read,read Access-Control-Expose-Headers: @@ -60,15 +60,15 @@ http_interactions: Access-Control-Allow-Origin: - "*" X-Via: - - haproxy-www-q9vr + - haproxy-www-ghzf X-Cache: - Miss from cloudfront Via: - - 1.1 174acb08636ac7d9e9a778bbf1bcbc53.cloudfront.net (CloudFront) + - 1.1 981753271eb5b6d11bc29d52f173a5da.cloudfront.net (CloudFront) X-Amz-Cf-Pop: - - SEA19-C1 + - SEA19-C2 X-Amz-Cf-Id: - - 4jbUBOYmcw-2-QPwgzQLEsRvY2S9R4g67tYOT5PbC57OhXPtBuq9Qw== + - L-rmPvdRvhGVcllMTq-fRBSb6__5GlIq8wmMdyQ1tBF_7KuufPKLLQ== body: encoding: ASCII-8BIT string: '{"ok":true,"channels":[{"id":"CRNUDTRQS","name":"everything","is_channel":true,"is_group":false,"is_im":false,"created":1577251090,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"everything","is_shared":false,"parent_conversation":null,"creator":"US1N1DHGQ","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TS3HWCGMD"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"Everything @@ -80,7 +80,7 @@ http_interactions: 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":"US1N1DHGQ","last_set":1577251089},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' http_version: null - recorded_at: Mon, 16 Mar 2020 05:32:01 GMT + recorded_at: Thu, 26 Mar 2020 07:13:23 GMT - request: method: get uri: https://slack.com/api/users.list?token= @@ -102,17 +102,17 @@ http_interactions: Content-Type: - application/json; charset=utf-8 Content-Length: - - '1159' + - '1337' Connection: - keep-alive Date: - - Mon, 16 Mar 2020 05:32:01 GMT + - Thu, 26 Mar 2020 07:13:23 GMT Server: - Apache X-Slack-Req-Id: - - e07c66bc0c5150e7386e3983b7f22670 + - bd123418a48da77e0d3815020905e2b9 X-Oauth-Scopes: - - identify,channels:read,users:read,chat:write + - identify,channels:history,groups:history,im:history,mpim:history,channels:read,users:read,users.profile:read,chat:write,users.profile:write X-Accepted-Oauth-Scopes: - users:read Access-Control-Expose-Headers: @@ -141,26 +141,28 @@ http_interactions: Access-Control-Allow-Origin: - "*" X-Via: - - haproxy-www-y3hd + - haproxy-www-xy1y X-Cache: - Miss from cloudfront Via: - - 1.1 0cf6c59c77f0fff670ae085179adc459.cloudfront.net (CloudFront) + - 1.1 3cd7af07832481c336aa1c93c9b4a6fe.cloudfront.net (CloudFront) X-Amz-Cf-Pop: - - SEA19-C1 + - SEA19-C2 X-Amz-Cf-Id: - - PkS9zehmsB9lXow1U5j9Bes8EVxu-3rCLSWKRskHPB4K6u5z7Vv4mw== + - "-Q0HppknvPFixjj0n0k6EfSmC72Ev1URtYcP0D6Fu4X3N6nao6kw7w==" body: encoding: ASCII-8BIT string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"TS3HWCGMD","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":"TS3HWCGMD"},"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":"US1N1DHGQ","team_id":"TS3HWCGMD","name":"nguyen.josephduy","deleted":false,"color":"9f69e7","real_name":"Joseph","tz":"America\/Los_Angeles","tz_label":"Pacific - Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Joseph","real_name_normalized":"Joseph","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"ge6083656f20","first_name":"Joseph","last_name":"","image_24":"https:\/\/secure.gravatar.com\/avatar\/e6083656f2077a422235fefbd53c4f55.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\/e6083656f2077a422235fefbd53c4f55.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\/e6083656f2077a422235fefbd53c4f55.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\/e6083656f2077a422235fefbd53c4f55.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\/e6083656f2077a422235fefbd53c4f55.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\/e6083656f2077a422235fefbd53c4f55.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png","status_text_canonical":"","team":"TS3HWCGMD"},"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":1584071583},{"id":"US3U562F8","team_id":"TS3HWCGMD","name":"keikei1128","deleted":false,"color":"4bbe2e","real_name":"Sharon + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Joseph","real_name_normalized":"Joseph","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"ge6083656f20","first_name":"Joseph","last_name":"","image_24":"https:\/\/secure.gravatar.com\/avatar\/e6083656f2077a422235fefbd53c4f55.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\/e6083656f2077a422235fefbd53c4f55.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\/e6083656f2077a422235fefbd53c4f55.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\/e6083656f2077a422235fefbd53c4f55.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\/e6083656f2077a422235fefbd53c4f55.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\/e6083656f2077a422235fefbd53c4f55.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png","status_text_canonical":"","team":"TS3HWCGMD"},"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":1585183050},{"id":"US3U562F8","team_id":"TS3HWCGMD","name":"keikei1128","deleted":false,"color":"4bbe2e","real_name":"Sharon Cheung","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Sharon - Cheung","real_name_normalized":"Sharon Cheung","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"c2c34f19a48a","image_original":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_original.jpg","is_custom_image":true,"image_24":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_24.jpg","image_32":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_32.jpg","image_48":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_48.jpg","image_72":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_72.jpg","image_192":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_192.jpg","image_512":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_512.jpg","image_1024":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_1024.jpg","status_text_canonical":"","team":"TS3HWCGMD"},"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":1584071583,"has_2fa":false},{"id":"U01031BGYK0","team_id":"TS3HWCGMD","name":"oscarapi","deleted":false,"color":"e7392d","real_name":"API + Cheung","real_name_normalized":"Sharon Cheung","display_name":"Sharon Cheung","display_name_normalized":"Sharon + Cheung","status_text":"","status_emoji":":poop:","status_expiration":0,"avatar_hash":"c2c34f19a48a","image_original":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_original.jpg","is_custom_image":true,"first_name":"Sharon","last_name":"Cheung","image_24":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_24.jpg","image_32":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_32.jpg","image_48":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_48.jpg","image_72":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_72.jpg","image_192":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_192.jpg","image_512":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_512.jpg","image_1024":"https:\/\/avatars.slack-edge.com\/2020-03-10\/994240739590_c2c34f19a48aa1b5d82d_1024.jpg","status_text_canonical":"","team":"TS3HWCGMD"},"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":1585206599,"has_2fa":false},{"id":"U01031BGYK0","team_id":"TS3HWCGMD","name":"oscarapi","deleted":false,"color":"e7392d","real_name":"API BOT","tz":"America\/Los_Angeles","tz_label":"Pacific Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"API - BOT","real_name_normalized":"API BOT","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g9a00fb2c827","api_app_id":"AUVV4G666","always_active":true,"bot_id":"BV21DTJN6","first_name":"API","last_name":"BOT","image_24":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-512.png","status_text_canonical":"","team":"TS3HWCGMD"},"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":1584234381}],"cache_ts":1584336721,"response_metadata":{"next_cursor":""}}' + BOT","real_name_normalized":"API BOT","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g9a00fb2c827","api_app_id":"AUVV4G666","always_active":true,"bot_id":"BV21DTJN6","first_name":"API","last_name":"BOT","image_24":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/9a00fb2c827193a687bdd040cbf63de3.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-512.png","status_text_canonical":"","team":"TS3HWCGMD"},"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":1584234381},{"id":"U010D85RKS8","team_id":"TS3HWCGMD","name":"zoom","deleted":false,"color":"3c989f","real_name":"Zoom","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Zoom","real_name_normalized":"Zoom","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"39a23abf8aa7","api_app_id":"A5GE9BMQC","always_active":true,"image_original":"https:\/\/avatars.slack-edge.com\/2020-03-19\/1002265608835_39a23abf8aa77bba1416_original.png","is_custom_image":true,"bot_id":"B010D85RJR2","image_24":"https:\/\/avatars.slack-edge.com\/2020-03-19\/1002265608835_39a23abf8aa77bba1416_24.png","image_32":"https:\/\/avatars.slack-edge.com\/2020-03-19\/1002265608835_39a23abf8aa77bba1416_32.png","image_48":"https:\/\/avatars.slack-edge.com\/2020-03-19\/1002265608835_39a23abf8aa77bba1416_48.png","image_72":"https:\/\/avatars.slack-edge.com\/2020-03-19\/1002265608835_39a23abf8aa77bba1416_72.png","image_192":"https:\/\/avatars.slack-edge.com\/2020-03-19\/1002265608835_39a23abf8aa77bba1416_192.png","image_512":"https:\/\/avatars.slack-edge.com\/2020-03-19\/1002265608835_39a23abf8aa77bba1416_512.png","image_1024":"https:\/\/avatars.slack-edge.com\/2020-03-19\/1002265608835_39a23abf8aa77bba1416_1024.png","status_text_canonical":"","team":"TS3HWCGMD"},"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":1584675234}],"cache_ts":1585206803,"response_metadata":{"next_cursor":""}}' http_version: null - recorded_at: Mon, 16 Mar 2020 05:32:01 GMT + recorded_at: Thu, 26 Mar 2020 07:13:23 GMT - request: method: post uri: https://slack.com/api/chat.postMessage?channel=US1N1DHGQ&text=Hello&token= @@ -186,13 +188,13 @@ http_interactions: Connection: - keep-alive Date: - - Mon, 16 Mar 2020 10:31:09 GMT + - Thu, 26 Mar 2020 07:13:24 GMT Server: - Apache X-Slack-Req-Id: - - a9db58266b8ff6f3b446e67af27420e9 + - 361fac5d18c732b1035b3bcd69875fe6 X-Oauth-Scopes: - - identify,channels:read,users:read,chat:write + - identify,channels:history,groups:history,im:history,mpim:history,channels:read,users:read,users.profile:read,chat:write,users.profile:write X-Accepted-Oauth-Scopes: - chat:write Access-Control-Expose-Headers: @@ -221,7 +223,7 @@ http_interactions: Access-Control-Allow-Origin: - "*" X-Via: - - haproxy-www-4usq + - haproxy-www-ff5q X-Cache: - Miss from cloudfront Via: @@ -229,10 +231,10 @@ http_interactions: X-Amz-Cf-Pop: - SEA19-C2 X-Amz-Cf-Id: - - seGAtUMVOKkRmT1I35pBhbWIsLiRpQkzMJ-kEjjwccTVKU2KwdwC9A== + - K5gDJnfhuHBFWBcDxia3QHM-dAmctvX2ult5iDAMSzymNArWZu4Uug== body: encoding: ASCII-8BIT - string: '{"ok":true,"channel":"DRRETUX17","ts":"1584354669.009600","message":{"bot_id":"BUYLK8X8R","type":"message","text":"Hello","user":"US3U562F8","ts":"1584354669.009600","team":"TS3HWCGMD","bot_profile":{"id":"BUYLK8X8R","deleted":false,"name":"OSCAR-API","updated":1583963468,"app_id":"AUVV4G666","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":"TS3HWCGMD"}}}' + string: '{"ok":true,"channel":"DRRETUX17","ts":"1585206804.065100","message":{"bot_id":"BUYLK8X8R","type":"message","text":"Hello","user":"US3U562F8","ts":"1585206804.065100","team":"TS3HWCGMD","bot_profile":{"id":"BUYLK8X8R","deleted":false,"name":"OSCAR-API","updated":1583963468,"app_id":"AUVV4G666","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":"TS3HWCGMD"}}}' http_version: null - recorded_at: Mon, 16 Mar 2020 10:31:09 GMT + recorded_at: Thu, 26 Mar 2020 07:13:24 GMT recorded_with: VCR 5.1.0 diff --git a/test/workspace_test.rb b/test/workspace_test.rb index 1fff7e93..645769aa 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -129,6 +129,20 @@ end end + #Optional - updating user setting + xdescribe "set_profile_setting(name, emoji)" do + # tried to write the test for it but couldn't quite figure out yet.. + #can only use it for the authorized user + it "will return ture it is an User that can change the setting" do + VCR.use_cassette("create_workspace")do + @workspace = Workspace.new + end + @workspace.select_user('keikei1128') + response = @workspace.set_profile_setting("Sharon", ":unicorn_face:") + + expect(response.selected.status_emoji).must_equal ":unicorn_face:" + end + end end From cdcd05ef2df0b8d22897a87eab14c32069ba0bb6 Mon Sep 17 00:00:00 2001 From: Sharon Cheung Date: Thu, 26 Mar 2020 00:48:10 -0700 Subject: [PATCH 25/25] remove bot-setting.json --- .gitignore | 1 + bot-settings.json | 1 - lib/recipient.rb | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) delete mode 100644 bot-settings.json diff --git a/.gitignore b/.gitignore index 3ff4fada..8f571b1e 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ # Ignore environemnt variables .env +.bot-settings.json diff --git a/bot-settings.json b/bot-settings.json deleted file mode 100644 index 847fb032..00000000 --- a/bot-settings.json +++ /dev/null @@ -1 +0,0 @@ -{"token":"xoxp-887608424727-887957206518-996645543335-37e6dc6198679681496f88d08b6299b4","profile":"{\"display_name\":\"hello\",\"status_emoji\":\":hat:\"}","user":"US1N1DHGQ"} \ No newline at end of file diff --git a/lib/recipient.rb b/lib/recipient.rb index 3ea0cc94..2fa48099 100644 --- a/lib/recipient.rb +++ b/lib/recipient.rb @@ -60,7 +60,7 @@ def set_user_profile_name(name, emoji) #Optional - #When I change these settings, the program should save them in the JSON format in a file named bot-settings.json. #When I restart the program, it should reload those settings. - File.open("./bot-settings.json", "w") do |name| + File.open("./.bot-settings.json", "w") do |name| name.write(query.to_json) end