From 000249e2533330ffd03262f47d4aa7ed19d30819 Mon Sep 17 00:00:00 2001 From: C Gutierrez Date: Tue, 10 Sep 2019 14:37:27 -0700 Subject: [PATCH 01/32] initial commit after initial files made --- .gitignore | 5 ++++- lib/channel.rb | 4 ++++ lib/recepient.rb | 3 +++ lib/set_up.rb | 25 +++++++++++++++++++++++++ lib/user.rb | 3 +++ lib/workspace.rb | 3 +++ test/channel_test.rb | 8 ++++++++ test/recepient_test.rb | 6 ++++++ test/test_helper.rb | 6 ++++++ test/user_test.rb | 6 ++++++ test/workspace_test.rb | 0 11 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 lib/channel.rb create mode 100644 lib/recepient.rb create mode 100644 lib/set_up.rb create mode 100644 lib/user.rb create mode 100644 lib/workspace.rb create mode 100644 test/channel_test.rb create mode 100644 test/recepient_test.rb create mode 100644 test/user_test.rb create mode 100644 test/workspace_test.rb diff --git a/.gitignore b/.gitignore index 8d6a243f..1f33c214 100644 --- a/.gitignore +++ b/.gitignore @@ -11,7 +11,7 @@ /tmp/ # Used by dotenv library to load environment variables. -# .env +.env ## Specific to RubyMotion: .dat* @@ -54,3 +54,6 @@ build-iPhoneSimulator/ # Ignore cassette files /specs/cassettes/ + +# Ignore my set-up test +/lib/set_up/ \ No newline at end of file diff --git a/lib/channel.rb b/lib/channel.rb new file mode 100644 index 00000000..9ed8441d --- /dev/null +++ b/lib/channel.rb @@ -0,0 +1,4 @@ +class Channel + + +end \ No newline at end of file diff --git a/lib/recepient.rb b/lib/recepient.rb new file mode 100644 index 00000000..18f069d9 --- /dev/null +++ b/lib/recepient.rb @@ -0,0 +1,3 @@ +class Recepient + +end \ No newline at end of file diff --git a/lib/set_up.rb b/lib/set_up.rb new file mode 100644 index 00000000..78b86d29 --- /dev/null +++ b/lib/set_up.rb @@ -0,0 +1,25 @@ +# To get this to work properly, running it in ruby (ruby.set_up.rb) you must be in the general project folder NOT lib. Run it from the project folder. This is a specificity problem because the .env file doesn't live in Lib so ruby can't find it from here. + +# Run this in ruby as (ruby lib/set_up.rb) + +require 'httparty' +require 'pry' + +require 'dotenv' +Dotenv.load + +def set_up_test + + url = "https://slack.com/api/conversations.list" + + query_params = { + token: ENV["SLACK_TOKEN"] + } + + response = HTTParty.get(url, query: query_params) + + return response + +end + +puts set_up_test \ No newline at end of file diff --git a/lib/user.rb b/lib/user.rb new file mode 100644 index 00000000..f26d4582 --- /dev/null +++ b/lib/user.rb @@ -0,0 +1,3 @@ +class User + +end \ No newline at end of file diff --git a/lib/workspace.rb b/lib/workspace.rb new file mode 100644 index 00000000..9ddc8558 --- /dev/null +++ b/lib/workspace.rb @@ -0,0 +1,3 @@ +class Workspace + +end \ No newline at end of file diff --git a/test/channel_test.rb b/test/channel_test.rb new file mode 100644 index 00000000..636ea107 --- /dev/null +++ b/test/channel_test.rb @@ -0,0 +1,8 @@ +require_relative 'test_helper' + +describe "channel attributes and behaviors" do + + + + +end \ No newline at end of file diff --git a/test/recepient_test.rb b/test/recepient_test.rb new file mode 100644 index 00000000..c58bd440 --- /dev/null +++ b/test/recepient_test.rb @@ -0,0 +1,6 @@ +require_relative 'test_helper' + +describe "recepient attributes and behaviors" do + + +end \ No newline at end of file diff --git a/test/test_helper.rb b/test/test_helper.rb index 90aeb408..b47dc37d 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -15,3 +15,9 @@ config.cassette_library_dir = "test/cassettes" config.hook_into :webmock end + +require_relative '../lib/channel' +require_relative '../lib/recepient' +require_relative '../lib/user' +require_relative '../lib/workspace' +require_relative '../lib/slack' \ No newline at end of file diff --git a/test/user_test.rb b/test/user_test.rb new file mode 100644 index 00000000..640acbf1 --- /dev/null +++ b/test/user_test.rb @@ -0,0 +1,6 @@ +require_relative 'test_helper' + +describe "user attributes and behaviors" do + + +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 82801205f515c79d1f11cc6822d77f6a602c72a4 Mon Sep 17 00:00:00 2001 From: Vi Date: Tue, 10 Sep 2019 14:40:00 -0700 Subject: [PATCH 02/32] updated .gitignore --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 8d6a243f..b78e0506 100644 --- a/.gitignore +++ b/.gitignore @@ -11,7 +11,7 @@ /tmp/ # Used by dotenv library to load environment variables. -# .env +.env ## Specific to RubyMotion: .dat* From d824bfda533ba5fcadb320cd5cc0d28c62714c8f Mon Sep 17 00:00:00 2001 From: Vi Date: Tue, 10 Sep 2019 15:32:42 -0700 Subject: [PATCH 03/32] completed set up, pseudocode for recipient tests --- lib/recepient.rb | 8 +++++ test/channel_test.rb | 11 +++++-- test/recepient_test.rb | 66 ++++++++++++++++++++++++++++++++++++++++-- test/slack_test.rb | 13 +++++++++ test/user_test.rb | 7 +++++ test/workspace_test.rb | 13 +++++++++ 6 files changed, 112 insertions(+), 6 deletions(-) create mode 100644 test/slack_test.rb diff --git a/lib/recepient.rb b/lib/recepient.rb index 18f069d9..eab85469 100644 --- a/lib/recepient.rb +++ b/lib/recepient.rb @@ -1,3 +1,11 @@ class Recepient +attr_reader :name +def initialize (name: slack_id:) + + +end + + + end \ No newline at end of file diff --git a/test/channel_test.rb b/test/channel_test.rb index 636ea107..4fe128b4 100644 --- a/test/channel_test.rb +++ b/test/channel_test.rb @@ -1,8 +1,13 @@ require_relative 'test_helper' describe "channel attributes and behaviors" do - - - + +before do +end + +it "is a test, maybe?" + VCR.use_cassette("slack_info") do + + end end \ No newline at end of file diff --git a/test/recepient_test.rb b/test/recepient_test.rb index c58bd440..f6972324 100644 --- a/test/recepient_test.rb +++ b/test/recepient_test.rb @@ -1,6 +1,66 @@ require_relative 'test_helper' -describe "recepient attributes and behaviors" do - - +# describe "recepient attributes and behaviors" do + +describe "recepient attribues" do + before do + VCR.use_cassette("slack_info") do +@ test_recepient = Recepient.new + end + end + + it "knows it's an instance of recepient" do + VCR.use_cassette("slack_info") do + end + end + + it "knows its slack_id" do + VCR.use_cassette("slack_info") do + end + end + + it "knows its name" do + VCR.use_cassette("slack_info") do + end + end + +end + +xdescribe "recepient implemented methods" do + it "responds to needing to send messages" do + #add guts later, for now, acknowledge request + end + + it "has a class method to fetch its own URL" do + # Clara thinks this might be send messages? Who knows? ? + end + + it "has a class method to fetch its own params" do + # Clara thinks this might be send messages? Who knows? ? + end + + +end + +# MAY NOT NEED ACTUAL TESTING, AS THESE ARE JUST HERE FOR INHERITANCE +xdescribe "recepient abstract methods" do + # these are useless in this class, they are here to be inhereted from + it "is able to create a summary of itself" do + end + + it "is able to create a list of all instances of itself" do + end + +end + +xdescribe "recepient attributes and behaviors" do + before do + end + + it "is a test, maybe?" do + VCR.use_cassette("slack_info") do + end + + end + end \ No newline at end of file diff --git a/test/slack_test.rb b/test/slack_test.rb new file mode 100644 index 00000000..bfc9ce2f --- /dev/null +++ b/test/slack_test.rb @@ -0,0 +1,13 @@ +require_relative 'test_helper' + +describe "slack attributes and behaviors" do + + before do + end + + it "is a test, maybe?" + VCR.use_cassette("slack_info") do + + end + +end \ No newline at end of file diff --git a/test/user_test.rb b/test/user_test.rb index 640acbf1..d80bb6b2 100644 --- a/test/user_test.rb +++ b/test/user_test.rb @@ -2,5 +2,12 @@ describe "user attributes and behaviors" do + before do + end + + it "is a test, maybe?" + VCR.use_cassette("slack_info") do + + end end \ No newline at end of file diff --git a/test/workspace_test.rb b/test/workspace_test.rb index e69de29b..2d995893 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -0,0 +1,13 @@ +require_relative 'test_helper' + +describe "workspace attributes and behavior" do + +before do +end + +it "is a test, maybe?" + VCR.use_cassette("slack_info") do + + end + +end \ No newline at end of file From 07a63099639b70f674e05d7734a0dde341e1642e Mon Sep 17 00:00:00 2001 From: Vi Date: Tue, 10 Sep 2019 17:03:39 -0700 Subject: [PATCH 04/32] wrote tests to verify that instances of user are able to recognize their initiation variables --- lib/recepient.rb | 11 ------ lib/recipient.rb | 27 ++++++++++++++ lib/user.rb | 2 +- test/channel_test.rb | 17 +++++---- test/recepient_test.rb | 66 ---------------------------------- test/recipient_test.rb | 64 +++++++++++++++++++++++++++++++++ test/slack_test.rb | 2 +- test/test_helper.rb | 2 +- test/user_test.rb | 80 ++++++++++++++++++++++++++++++++++++------ test/workspace_test.rb | 2 -- 10 files changed, 171 insertions(+), 102 deletions(-) delete mode 100644 lib/recepient.rb create mode 100644 lib/recipient.rb delete mode 100644 test/recepient_test.rb create mode 100644 test/recipient_test.rb diff --git a/lib/recepient.rb b/lib/recepient.rb deleted file mode 100644 index eab85469..00000000 --- a/lib/recepient.rb +++ /dev/null @@ -1,11 +0,0 @@ -class Recepient - -attr_reader :name -def initialize (name: slack_id:) - - -end - - - -end \ No newline at end of file diff --git a/lib/recipient.rb b/lib/recipient.rb new file mode 100644 index 00000000..769a867d --- /dev/null +++ b/lib/recipient.rb @@ -0,0 +1,27 @@ +class Recipient + + attr_reader :name, :slack_id + + def initialize (name:, slack_id:) + + if name.class != String + raise ArgumentError.new "wrong format for initiating name" + end + @name = name + + if id.class != String + raise ArgumentError.new "wrong format for initiating id" + end + @id = id + + end + + + def details + raise NotImplementedError.new "not implemented in recipient class" + end + + def self.list + raise NotImplementedError.new "not implemented in recipient class" + end +end diff --git a/lib/user.rb b/lib/user.rb index f26d4582..b38d91d6 100644 --- a/lib/user.rb +++ b/lib/user.rb @@ -1,3 +1,3 @@ class User - + end \ No newline at end of file diff --git a/test/channel_test.rb b/test/channel_test.rb index 4fe128b4..a4aa953b 100644 --- a/test/channel_test.rb +++ b/test/channel_test.rb @@ -1,13 +1,12 @@ require_relative 'test_helper' describe "channel attributes and behaviors" do - -before do -end - -it "is a test, maybe?" - VCR.use_cassette("slack_info") do - - end - + + before do + end + + it "is a test, maybe?" do + end + + end \ No newline at end of file diff --git a/test/recepient_test.rb b/test/recepient_test.rb deleted file mode 100644 index f6972324..00000000 --- a/test/recepient_test.rb +++ /dev/null @@ -1,66 +0,0 @@ -require_relative 'test_helper' - -# describe "recepient attributes and behaviors" do - -describe "recepient attribues" do - before do - VCR.use_cassette("slack_info") do -@ test_recepient = Recepient.new - end - end - - it "knows it's an instance of recepient" do - VCR.use_cassette("slack_info") do - end - end - - it "knows its slack_id" do - VCR.use_cassette("slack_info") do - end - end - - it "knows its name" do - VCR.use_cassette("slack_info") do - end - end - -end - -xdescribe "recepient implemented methods" do - it "responds to needing to send messages" do - #add guts later, for now, acknowledge request - end - - it "has a class method to fetch its own URL" do - # Clara thinks this might be send messages? Who knows? ? - end - - it "has a class method to fetch its own params" do - # Clara thinks this might be send messages? Who knows? ? - end - - -end - -# MAY NOT NEED ACTUAL TESTING, AS THESE ARE JUST HERE FOR INHERITANCE -xdescribe "recepient abstract methods" do - # these are useless in this class, they are here to be inhereted from - it "is able to create a summary of itself" do - end - - it "is able to create a list of all instances of itself" do - end - -end - -xdescribe "recepient attributes and behaviors" do - before do - end - - it "is a test, maybe?" do - VCR.use_cassette("slack_info") do - end - - end - -end \ No newline at end of file diff --git a/test/recipient_test.rb b/test/recipient_test.rb new file mode 100644 index 00000000..bf362291 --- /dev/null +++ b/test/recipient_test.rb @@ -0,0 +1,64 @@ +require_relative 'test_helper' + +# describe "recipient attributes and behaviors" do + +describe "recipient attribues" do + before do + @test_name = "awesome" + @slack_id = "0001" + @test_recipient = Recipient.new(name: @test_name, slack_id: @slack_id) + end + it "knows it's an instance of recipient" do + expect(@test_recipient).must_be_kind_of Recipient + end + + it "knows its slack_id" do + expect(@test_recipient.id).must_equal @test_id + end + + it "knows its name" do + expect(@test_recipient.name).must_equal @test_name + end + +end + +describe "recipient blocks initialization if incorrect format" do + it "allows initialization with name and id as instances of string to match API" do + VCR.use_cassette("slack_info") do + expect{test_recipient = Recipient.new(name: "0001", id: 15.999)}.must_raise ArgumentError + expect{test_recipient = Recipient.new(name: 0001, id: "15.999")}.must_raise ArgumentError + end + end + +end + +describe "fleshed-out methods of being able to provide a detailed summary" do + it "does not implement a details method" do + detail_free_recipient = Recipient.new(name: "silly", slack_id: "666") + expect{detail_free_recipient.details}.must_raise NotImplementedError + end +end + +describe "fleshed-out methods of being able to make a list of instances of itself" do + it "does not implement a self.list method" do + expect{Recipient.list}.must_raise NotImplementedError + end +end + + + +xdescribe "recipient implemented methods" do + it "responds to needing to send messages" do + #add guts later, for now, acknowledge request + end + + it "has a class method to fetch its own URL" do + # Clara thinks this might be send messages? Who knows? ? + end + + it "has a class method to fetch its own params" do + # Clara thinks this might be send messages? Who knows? ? + end + + +end diff --git a/test/slack_test.rb b/test/slack_test.rb index bfc9ce2f..105a066c 100644 --- a/test/slack_test.rb +++ b/test/slack_test.rb @@ -7,7 +7,7 @@ it "is a test, maybe?" VCR.use_cassette("slack_info") do - + end end \ No newline at end of file diff --git a/test/test_helper.rb b/test/test_helper.rb index b47dc37d..f1275ee7 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -17,7 +17,7 @@ end require_relative '../lib/channel' -require_relative '../lib/recepient' +require_relative '../lib/recipient' require_relative '../lib/user' require_relative '../lib/workspace' require_relative '../lib/slack' \ No newline at end of file diff --git a/test/user_test.rb b/test/user_test.rb index d80bb6b2..90e4e193 100644 --- a/test/user_test.rb +++ b/test/user_test.rb @@ -1,13 +1,71 @@ require_relative 'test_helper' -describe "user attributes and behaviors" do - - before do - end - - it "is a test, maybe?" - VCR.use_cassette("slack_info") do - - end - -end \ No newline at end of file +describe "instances of user initiate " do + #throws all sorts of errors for missing or mis-classed information +end + + +describe "instances of user initiate properly using manually passed in data" do + + before do + @test_name = "Awesome" + @test_id = "luckynumber13" + @test_real_name = "Hella Awesome" + @test_status_text = "Bein Awesome" + @test_emoji = ":sunglasses:" + + @test_user = User.new(name: @test_name, slack_id: @test_id, real_name: @test_real_name, status_test: @test_status_text, status_emoji: @test_emoji) + end + + it "verify initialization of User" do + + expect(@test_user).is_kind_of User + expect(@test_user.name).must_equal @test_name + expect(@test_user.slack_id).must_equal @test_id + expect(@test_user.real_name).must_equal @test_real_name + expect(@test_user.status_text).must_equal @test_status_text + expect(@test_user.status_emoji).must_equal @test_emoji + + end + + + describe "fleshed-out methods of being able to provide a detailed summary" do + end + + describe "fleshed-out methods of being able to make a list of instances of itself" do + end + + describe "instances of user can initiate from API and parse the data" do + + + #Any tests involving a User should use the username SlackBot + + before do + end + + it "is a test, maybe?" + + end + + # describe "" + + describe "user attributes and behaviors" do + + before do + end + + it "is a test, maybe?" + VCR.use_cassette("slack_info") do + end + end + + describe "user attributes and behaviors" do + + before do + end + + it "is a test, maybe?" + VCR.use_cassette("slack_info") do + end + end +end \ No newline at end of file diff --git a/test/workspace_test.rb b/test/workspace_test.rb index 2d995893..333532fc 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -6,8 +6,6 @@ end it "is a test, maybe?" - VCR.use_cassette("slack_info") do - end end \ No newline at end of file From 5fbcf861081e859849cf3132bdaa4dbe0d226307 Mon Sep 17 00:00:00 2001 From: C Gutierrez Date: Tue, 10 Sep 2019 20:12:21 -0700 Subject: [PATCH 05/32] added tests to user_test to verify inputs used to initialize --- test/user_test.rb | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/test/user_test.rb b/test/user_test.rb index 90e4e193..7bc5d3ae 100644 --- a/test/user_test.rb +++ b/test/user_test.rb @@ -2,9 +2,42 @@ describe "instances of user initiate " do #throws all sorts of errors for missing or mis-classed information + before do + @test_name = "Awesome" + @test_id = "luckynumber13" + @test_real_name = "Hella Awesome" + @test_status_text = "Bein Awesome" + @test_emoji = ":sunglasses:" + end + + it "verifies that attempting to initialize an instance of User without appropriate data throws an ArgumentError" do + integer_test_name = 00132 + expect{ + @test_user = User.new(name: @test_name, slack_id: @test_id, real_name: @test_real_name, status_test: @test_status_text, status_emoji: @test_emoji) + }.must_raise ArgumentError + + integer_slack_id = 13 + expect{ + @test_user = User.new(name: @test_name, slack_id: integer_slack_id, real_name: @test_real_name, status_test: @test_status_text, status_emoji: @test_emoji) + }.must_raise ArgumentError + + array_real_name = ["awesome", "pawsome"] + expect{ + @test_user = User.new(name: @test_name, slack_id: @test_id, real_name: array_real_name, status_test: @test_status_text, status_emoji: @test_emoji) + }.must_raise ArgumentError + + integer_status_text = 99443 + expect{ + @test_user = User.new(name: @test_name, slack_id: @test_id, real_name: @test_real_name, status_test: integer_status_text, status_emoji: @test_emoji) + }.must_raise ArgumentError + + stringy_emoji = "sunglasses" + expect{ + @test_user = User.new(name: @test_name, slack_id: @test_id, real_name: @test_real_name, status_test: @test_status_text, status_emoji: stringy_emoji) + }.must_raise ArgumentError + end end - describe "instances of user initiate properly using manually passed in data" do before do From 71a3b7b92233920dac52cb02bd3ae17b4e603f95 Mon Sep 17 00:00:00 2001 From: Vi Date: Wed, 11 Sep 2019 13:39:21 -0700 Subject: [PATCH 06/32] created user initialization method --- lib/user.rb | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/lib/user.rb b/lib/user.rb index b38d91d6..c5b81b00 100644 --- a/lib/user.rb +++ b/lib/user.rb @@ -1,3 +1,25 @@ class User - + + attr_reader + + def initialize(name:, slack_id:, real_name:, status_text:, status_emoji:) + @name = name + @slack_id = slack_id + + if real_name.class != String + raise ArgumentError.new "Wrong format for real name initialization" + end + @real_name = real_name + + if status_text.class != String + raise ArgumentError.new "Wrong format for status initialization" + end + @status_text = status_text + + #Verify here that status emoji contains : at the beginning and end of the string + if status_emoji[0] != ":" || status_emoji[-1] != ":" + raise ArgumentError.new "Wrong format for emoji initialization" + end + @status_emoji = status_emoji + end end \ No newline at end of file From ce67b02a29577b9e7c39ef1a2495eaff6f4b5041 Mon Sep 17 00:00:00 2001 From: C Gutierrez Date: Wed, 11 Sep 2019 16:02:26 -0700 Subject: [PATCH 07/32] started workspace functionality, able to initiate an API call to Slack and receive a message of success --- .DS_Store | Bin 0 -> 6148 bytes lib/recipient.rb | 8 ++-- lib/user.rb | 44 ++++++++++---------- lib/workspace.rb | 71 +++++++++++++++++++++++++++++++- test/cassettes/cassettes.yml | 77 +++++++++++++++++++++++++++++++++++ test/recipient_test.rb | 6 +-- test/test_helper.rb | 1 + test/user_test.rb | 4 +- test/workspace_test.rb | 56 +++++++++++++++++++++---- 9 files changed, 228 insertions(+), 39 deletions(-) create mode 100644 .DS_Store create mode 100644 test/cassettes/cassettes.yml diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..a2eb533abf551d042629249e6fe5fb378b3b5ee0 GIT binary patch literal 6148 zcmeH~u?oUK42Bc!Ah>jNyu}Cb4Gz&K=nFU~E>c0O^F6wMazU^xC+1b{XuyJ79K1T}(S!u1*@b}wNMJ-@TJzTK|1JE}{6A`8N&+PC zX9Tp_belC^D(=>|*R%RAs api_key} + + user_response = HTTParty.get(url, query: query_parameters) + + return user_response["ok"] == true + + end + + # def api_call_listchannels(channel) + # #This method takes in the entire listchannel api + # # url = "whatever_whatever" + + # # parameters + + # #have our method call + # #using response, pass it to make channels + + # # make channels + # return channel_response + # end + + + # def make_users(user_response) + # # response["members"].each |user| + # # name = user["name"] + + + + #calling users instance variable + + # make instances of users using the data from api_call + + # store instances of users using the data from api_call + + # end + + def make_channels(channel_response) + + + #parse data here into objects + + # make instances of channels using the data from api_call + + #store instances of channels using the data from api_call + + end end \ No newline at end of file diff --git a/test/cassettes/cassettes.yml b/test/cassettes/cassettes.yml new file mode 100644 index 00000000..9bbe0398 --- /dev/null +++ b/test/cassettes/cassettes.yml @@ -0,0 +1,77 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/users.list?token=xoxp-754325772192-756191243303-755187807044-3bffb2ed77b649184b1fa7ce57dd622b + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '921' + Connection: + - keep-alive + Date: + - Wed, 11 Sep 2019 22:49:51 GMT + Server: + - Apache + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - c034cea9-edf1-45b1-9613-68d18f7a4851 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write:bot + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - users:read + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-s1xo + X-Cache: + - Miss from cloudfront + Via: + - 1.1 61bc723adb3b1884ed759711e84e13a9.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - lj78ZgDgQG8IY8I3jNtfwaTywAqOVanONEJ0m4LLc_oBZmGE2JAdvg== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"TN69KNQ5N","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":null,"tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Slackbot","real_name_normalized":"Slackbot","display_name":"Slackbot","display_name_normalized":"Slackbot","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"sv41d8cd98f0","always_active":true,"first_name":"slackbot","last_name":"","image_24":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png","image_32":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png","image_192":"https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png","image_512":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png","status_text_canonical":"","team":"TN69KNQ5N"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":0},{"id":"UN69SPE21","team_id":"TN69KNQ5N","name":"vanessareigosa","deleted":false,"color":"9f69e7","real_name":"v","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"v","real_name_normalized":"v","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gd0d0c84e105","first_name":"v","last_name":"","image_24":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-512.png","status_text_canonical":"","team":"TN69KNQ5N"},"is_admin":true,"is_owner":true,"is_primary_owner":true,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568072074},{"id":"UN85M758X","team_id":"TN69KNQ5N","name":"gutierrez.clara.es","deleted":false,"color":"4bbe2e","real_name":"Clara","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Clara","real_name_normalized":"Clara","display_name":"Clara","display_name_normalized":"Clara","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g096e4481348","image_24":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-512.png","status_text_canonical":"","team":"TN69KNQ5N"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568072026,"has_2fa":false}],"cache_ts":1568242191,"response_metadata":{"next_cursor":""}}' + http_version: + recorded_at: Wed, 11 Sep 2019 22:49:51 GMT +recorded_with: VCR 5.0.0 diff --git a/test/recipient_test.rb b/test/recipient_test.rb index bf362291..8663f56b 100644 --- a/test/recipient_test.rb +++ b/test/recipient_test.rb @@ -5,15 +5,15 @@ describe "recipient attribues" do before do @test_name = "awesome" - @slack_id = "0001" - @test_recipient = Recipient.new(name: @test_name, slack_id: @slack_id) + @test_slack_id = "0001" + @test_recipient = Recipient.new(name: @test_name, slack_id: @test_slack_id) end it "knows it's an instance of recipient" do expect(@test_recipient).must_be_kind_of Recipient end it "knows its slack_id" do - expect(@test_recipient.id).must_equal @test_id + expect(@test_recipient.slack_id).must_equal @test_slack_id end it "knows its name" do diff --git a/test/test_helper.rb b/test/test_helper.rb index f1275ee7..8cd12dcc 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -5,6 +5,7 @@ require 'minitest' require 'minitest/autorun' +require 'awesome_print' require 'minitest/reporters' require 'minitest/skip_dsl' require 'vcr' diff --git a/test/user_test.rb b/test/user_test.rb index 7bc5d3ae..c7492bfd 100644 --- a/test/user_test.rb +++ b/test/user_test.rb @@ -47,12 +47,12 @@ @test_status_text = "Bein Awesome" @test_emoji = ":sunglasses:" - @test_user = User.new(name: @test_name, slack_id: @test_id, real_name: @test_real_name, status_test: @test_status_text, status_emoji: @test_emoji) + @test_user = User.new(name: @test_name, slack_id: @test_id, real_name: @test_real_name, status_text: @test_status_text, status_emoji: @test_emoji) end it "verify initialization of User" do - expect(@test_user).is_kind_of User + expect(@test_user).must_be_kind_of User expect(@test_user.name).must_equal @test_name expect(@test_user.slack_id).must_equal @test_id expect(@test_user.real_name).must_equal @test_real_name diff --git a/test/workspace_test.rb b/test/workspace_test.rb index 333532fc..d4f91f09 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -1,11 +1,53 @@ require_relative 'test_helper' -describe "workspace attributes and behavior" do - -before do +describe "workplace attributes" do + before do + # VCR.use_cassette("cassettes") do + @test_workspace = Workspace.new + end + # end + + it "recognizes that it's an instance of Workspace" do + @test_workspace = Workspace.new + expect(@test_workspace).must_be_kind_of Workspace + end + + it "will hold an array of users which will be initially empty" do #temporary test + @test_workspace = Workspace.new + expect(@test_workspace.users).must_be_kind_of Array + expect(@test_workspace.users).must_be_empty + end + + it "will hold an array of channels which will be initially empty" do #temporary test + @test_workspace = Workspace.new + expect(@test_workspace.channels).must_be_kind_of Array + expect(@test_workspace.channels).must_be_empty + end + end -it "is a test, maybe?" - - -end \ No newline at end of file +describe "workplace behavior in talking to Slack API" do + + # before do + # VCR.use_cassette("cassettes") do + # @test_workspace = Workspace.new + # end + # end + + it "will call Slack API succesfully" do + VCR.use_cassette("cassettes") do + @test_workspace = Workspace.new + expect(@test_workspace.api_call_list_users).must_equal true + end + end + + + it "it will parse API data to retain necessary details about users" do + VCR.use_cassette("slack_info") do + #expecting to have to parse the data from Slack API into something that's recognizable wherein "name" has a predictable value (will be checked against information in Postman) + end + end + + + # upon request, will use Slack API data to interact with / as a user or channel +end From 1fc0072f4a7bb3f7c3630cce8855daf60de9db6e Mon Sep 17 00:00:00 2001 From: CEsGutierrez <45987016+CEsGutierrez@users.noreply.github.com> Date: Wed, 11 Sep 2019 16:09:16 -0700 Subject: [PATCH 08/32] Delete cassettes.yml --- test/cassettes/cassettes.yml | 77 ------------------------------------ 1 file changed, 77 deletions(-) delete mode 100644 test/cassettes/cassettes.yml diff --git a/test/cassettes/cassettes.yml b/test/cassettes/cassettes.yml deleted file mode 100644 index 9bbe0398..00000000 --- a/test/cassettes/cassettes.yml +++ /dev/null @@ -1,77 +0,0 @@ ---- -http_interactions: -- request: - method: get - uri: https://slack.com/api/users.list?token=xoxp-754325772192-756191243303-755187807044-3bffb2ed77b649184b1fa7ce57dd622b - body: - encoding: US-ASCII - string: '' - headers: - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - "*/*" - User-Agent: - - Ruby - response: - status: - code: 200 - message: OK - headers: - Content-Type: - - application/json; charset=utf-8 - Content-Length: - - '921' - Connection: - - keep-alive - Date: - - Wed, 11 Sep 2019 22:49:51 GMT - Server: - - Apache - X-Content-Type-Options: - - nosniff - X-Slack-Req-Id: - - c034cea9-edf1-45b1-9613-68d18f7a4851 - X-Oauth-Scopes: - - identify,channels:read,users:read,chat:write:bot - Expires: - - Mon, 26 Jul 1997 05:00:00 GMT - Cache-Control: - - private, no-cache, no-store, must-revalidate - Access-Control-Expose-Headers: - - x-slack-req-id, retry-after - X-Xss-Protection: - - '0' - X-Accepted-Oauth-Scopes: - - users:read - Vary: - - Accept-Encoding - Pragma: - - no-cache - Access-Control-Allow-Headers: - - slack-route, x-slack-version-ts - Strict-Transport-Security: - - max-age=31536000; includeSubDomains; preload - Referrer-Policy: - - no-referrer - Access-Control-Allow-Origin: - - "*" - X-Via: - - haproxy-www-s1xo - X-Cache: - - Miss from cloudfront - Via: - - 1.1 61bc723adb3b1884ed759711e84e13a9.cloudfront.net (CloudFront) - X-Amz-Cf-Pop: - - SEA19-C2 - X-Amz-Cf-Id: - - lj78ZgDgQG8IY8I3jNtfwaTywAqOVanONEJ0m4LLc_oBZmGE2JAdvg== - body: - encoding: ASCII-8BIT - string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"TN69KNQ5N","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":null,"tz_label":"Pacific - Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Slackbot","real_name_normalized":"Slackbot","display_name":"Slackbot","display_name_normalized":"Slackbot","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"sv41d8cd98f0","always_active":true,"first_name":"slackbot","last_name":"","image_24":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png","image_32":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png","image_192":"https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png","image_512":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png","status_text_canonical":"","team":"TN69KNQ5N"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":0},{"id":"UN69SPE21","team_id":"TN69KNQ5N","name":"vanessareigosa","deleted":false,"color":"9f69e7","real_name":"v","tz":"America\/Los_Angeles","tz_label":"Pacific - Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"v","real_name_normalized":"v","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gd0d0c84e105","first_name":"v","last_name":"","image_24":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-512.png","status_text_canonical":"","team":"TN69KNQ5N"},"is_admin":true,"is_owner":true,"is_primary_owner":true,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568072074},{"id":"UN85M758X","team_id":"TN69KNQ5N","name":"gutierrez.clara.es","deleted":false,"color":"4bbe2e","real_name":"Clara","tz":"America\/Los_Angeles","tz_label":"Pacific - Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Clara","real_name_normalized":"Clara","display_name":"Clara","display_name_normalized":"Clara","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g096e4481348","image_24":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-512.png","status_text_canonical":"","team":"TN69KNQ5N"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568072026,"has_2fa":false}],"cache_ts":1568242191,"response_metadata":{"next_cursor":""}}' - http_version: - recorded_at: Wed, 11 Sep 2019 22:49:51 GMT -recorded_with: VCR 5.0.0 From 39a2996941b7d70324e23597f27ef5aa55e2d746 Mon Sep 17 00:00:00 2001 From: C Gutierrez Date: Wed, 11 Sep 2019 17:02:35 -0700 Subject: [PATCH 09/32] changed git ignore file to exclude cassettes --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 1f33c214..ae9badff 100644 --- a/.gitignore +++ b/.gitignore @@ -54,6 +54,7 @@ build-iPhoneSimulator/ # Ignore cassette files /specs/cassettes/ +/test/cassettes/ # Ignore my set-up test /lib/set_up/ \ No newline at end of file From 1f83718ad5909f8c93047d545776d9ab41ea6cef Mon Sep 17 00:00:00 2001 From: C Gutierrez Date: Wed, 11 Sep 2019 23:30:58 -0700 Subject: [PATCH 10/32] tests for initial channel functionality --- test/channel_test.rb | 101 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 100 insertions(+), 1 deletion(-) diff --git a/test/channel_test.rb b/test/channel_test.rb index a4aa953b..2fd9e9e8 100644 --- a/test/channel_test.rb +++ b/test/channel_test.rb @@ -9,4 +9,103 @@ end -end \ No newline at end of file +end + + + + +require_relative 'test_helper' + +describe "instances of channel initiate " do + #throws all sorts of errors for missing or mis-classed information + before do + @test_name = "Awesome" + @test_slack_id = "luckynumber13" + @test_topic = "Awesome existence" + @test_member_count = "9" + end + + it "verifies that attempting to initialize an instance of Channel without appropriate data throws an ArgumentError" do + integer_name = 00132 + expect{ + @test_channel = User.new(name: integer_name , slack_id: @test_slack_id, topic: @test_topic, member_count: @@test_member_count) + }.must_raise ArgumentError + + integer_slack_id = 13 + expect{ + @test_channel = User.new(name: @test_name, slack_id: integer_slack_id, topic: @test_topic, member_count: @@test_member_count) + }.must_raise ArgumentError + + array_topic = ["awesome", "pawsome"] + expect{ + @test_channel = User.new(name: @test_name, slack_id: @test_slack_id, topic: array_topic , member_count: @@test_member_count) + }.must_raise ArgumentError + + integer_member_count = 99443 + expect{ + @test_channel = User.new(name: @test_name, slack_id: @test_slack_id, topic: @test_topic, member_count: integer_member_count) + }.must_raise ArgumentError + end +end + +describe "instances of user initiate properly using manually passed in data" do + + before do + @test_name = "Awesome" + @test_slack_id = "luckynumber13" + @test_topic = "Awesome existence" + @test_member_count = "9" + + @test_channel = User.new(name: @test_name, slack_id: @test_slack_id, topic: @test_topic, member_count: @@test_member_count + end + + it "verify initialization of User" do + + expect(@test_channel).must_be_kind_of Channel + expect(@test_channel.name).must_equal @test_name + expect(@test_channel.slack_id).must_equal @test_slack_id + expect(@test_channel.topic).must_equal @test_topic + expect(@test_channel.member_count).must_equal @test_member_count + + end + + describe "fleshed-out methods of being able to provide a detailed summary" do + end + + describe "fleshed-out methods of being able to make a list of instances of itself" do + end + + describe "instances of user can initiate from API and parse the data" do + + + #Any tests involving a User should use the username SlackBot + + before do + end + + it "is a test, maybe?" + + end + + # describe "" + + describe "user attributes and behaviors" do + + before do + end + + it "is a test, maybe?" + VCR.use_cassette("slack_info") do + end + end + + describe "user attributes and behaviors" do + + before do + end + + it "is a test, maybe?" + VCR.use_cassette("slack_info") do + end + end + end \ No newline at end of file From 78186fd44609a94a682421dd1ca254c222cf2a42 Mon Sep 17 00:00:00 2001 From: Vi Date: Thu, 12 Sep 2019 10:03:09 -0700 Subject: [PATCH 11/32] updated test_helper to hide token from cassette --- test/test_helper.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/test_helper.rb b/test/test_helper.rb index 8cd12dcc..3fe19d27 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -15,6 +15,10 @@ VCR.configure do |config| config.cassette_library_dir = "test/cassettes" config.hook_into :webmock + + config.filter_sensitive_data "" do + ENV("SLACK_TOKEN") + end end require_relative '../lib/channel' From 789e477aa708795e80df7b436e7f2b159876e863 Mon Sep 17 00:00:00 2001 From: C Gutierrez Date: Thu, 12 Sep 2019 13:45:15 -0700 Subject: [PATCH 12/32] started workspace functionality, able to initiate an API call to Slack and receive a message of success --- .DS_Store | Bin 0 -> 6148 bytes lib/recipient.rb | 8 ++--- lib/user.rb | 44 ++++++++++++------------- lib/workspace.rb | 71 ++++++++++++++++++++++++++++++++++++++++- test/recipient_test.rb | 6 ++-- test/test_helper.rb | 1 + test/user_test.rb | 4 +-- test/workspace_test.rb | 56 ++++++++++++++++++++++++++++---- 8 files changed, 151 insertions(+), 39 deletions(-) create mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..a2eb533abf551d042629249e6fe5fb378b3b5ee0 GIT binary patch literal 6148 zcmeH~u?oUK42Bc!Ah>jNyu}Cb4Gz&K=nFU~E>c0O^F6wMazU^xC+1b{XuyJ79K1T}(S!u1*@b}wNMJ-@TJzTK|1JE}{6A`8N&+PC zX9Tp_belC^D(=>|*R%RAs api_key} + + user_response = HTTParty.get(url, query: query_parameters) + + return user_response["ok"] == true + + end + + # def api_call_listchannels(channel) + # #This method takes in the entire listchannel api + # # url = "whatever_whatever" + + # # parameters + + # #have our method call + # #using response, pass it to make channels + + # # make channels + # return channel_response + # end + + + # def make_users(user_response) + # # response["members"].each |user| + # # name = user["name"] + + + + #calling users instance variable + + # make instances of users using the data from api_call + + # store instances of users using the data from api_call + + # end + + def make_channels(channel_response) + + + #parse data here into objects + + # make instances of channels using the data from api_call + + #store instances of channels using the data from api_call + + end end \ No newline at end of file diff --git a/test/recipient_test.rb b/test/recipient_test.rb index bf362291..8663f56b 100644 --- a/test/recipient_test.rb +++ b/test/recipient_test.rb @@ -5,15 +5,15 @@ describe "recipient attribues" do before do @test_name = "awesome" - @slack_id = "0001" - @test_recipient = Recipient.new(name: @test_name, slack_id: @slack_id) + @test_slack_id = "0001" + @test_recipient = Recipient.new(name: @test_name, slack_id: @test_slack_id) end it "knows it's an instance of recipient" do expect(@test_recipient).must_be_kind_of Recipient end it "knows its slack_id" do - expect(@test_recipient.id).must_equal @test_id + expect(@test_recipient.slack_id).must_equal @test_slack_id end it "knows its name" do diff --git a/test/test_helper.rb b/test/test_helper.rb index f1275ee7..8cd12dcc 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -5,6 +5,7 @@ require 'minitest' require 'minitest/autorun' +require 'awesome_print' require 'minitest/reporters' require 'minitest/skip_dsl' require 'vcr' diff --git a/test/user_test.rb b/test/user_test.rb index 7bc5d3ae..c7492bfd 100644 --- a/test/user_test.rb +++ b/test/user_test.rb @@ -47,12 +47,12 @@ @test_status_text = "Bein Awesome" @test_emoji = ":sunglasses:" - @test_user = User.new(name: @test_name, slack_id: @test_id, real_name: @test_real_name, status_test: @test_status_text, status_emoji: @test_emoji) + @test_user = User.new(name: @test_name, slack_id: @test_id, real_name: @test_real_name, status_text: @test_status_text, status_emoji: @test_emoji) end it "verify initialization of User" do - expect(@test_user).is_kind_of User + expect(@test_user).must_be_kind_of User expect(@test_user.name).must_equal @test_name expect(@test_user.slack_id).must_equal @test_id expect(@test_user.real_name).must_equal @test_real_name diff --git a/test/workspace_test.rb b/test/workspace_test.rb index 333532fc..d4f91f09 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -1,11 +1,53 @@ require_relative 'test_helper' -describe "workspace attributes and behavior" do - -before do +describe "workplace attributes" do + before do + # VCR.use_cassette("cassettes") do + @test_workspace = Workspace.new + end + # end + + it "recognizes that it's an instance of Workspace" do + @test_workspace = Workspace.new + expect(@test_workspace).must_be_kind_of Workspace + end + + it "will hold an array of users which will be initially empty" do #temporary test + @test_workspace = Workspace.new + expect(@test_workspace.users).must_be_kind_of Array + expect(@test_workspace.users).must_be_empty + end + + it "will hold an array of channels which will be initially empty" do #temporary test + @test_workspace = Workspace.new + expect(@test_workspace.channels).must_be_kind_of Array + expect(@test_workspace.channels).must_be_empty + end + end -it "is a test, maybe?" - - -end \ No newline at end of file +describe "workplace behavior in talking to Slack API" do + + # before do + # VCR.use_cassette("cassettes") do + # @test_workspace = Workspace.new + # end + # end + + it "will call Slack API succesfully" do + VCR.use_cassette("cassettes") do + @test_workspace = Workspace.new + expect(@test_workspace.api_call_list_users).must_equal true + end + end + + + it "it will parse API data to retain necessary details about users" do + VCR.use_cassette("slack_info") do + #expecting to have to parse the data from Slack API into something that's recognizable wherein "name" has a predictable value (will be checked against information in Postman) + end + end + + + # upon request, will use Slack API data to interact with / as a user or channel +end From 3d1df63ee0017ef314e3aca5e5d494ea26a72ac1 Mon Sep 17 00:00:00 2001 From: C Gutierrez Date: Wed, 11 Sep 2019 17:02:35 -0700 Subject: [PATCH 13/32] changed git ignore file to exclude cassettes --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 1f33c214..ae9badff 100644 --- a/.gitignore +++ b/.gitignore @@ -54,6 +54,7 @@ build-iPhoneSimulator/ # Ignore cassette files /specs/cassettes/ +/test/cassettes/ # Ignore my set-up test /lib/set_up/ \ No newline at end of file From cb271dbf52242307cf227d8ddd602141d0c4c043 Mon Sep 17 00:00:00 2001 From: C Gutierrez Date: Wed, 11 Sep 2019 23:30:58 -0700 Subject: [PATCH 14/32] tests for initial channel functionality --- test/channel_test.rb | 101 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 100 insertions(+), 1 deletion(-) diff --git a/test/channel_test.rb b/test/channel_test.rb index a4aa953b..2fd9e9e8 100644 --- a/test/channel_test.rb +++ b/test/channel_test.rb @@ -9,4 +9,103 @@ end -end \ No newline at end of file +end + + + + +require_relative 'test_helper' + +describe "instances of channel initiate " do + #throws all sorts of errors for missing or mis-classed information + before do + @test_name = "Awesome" + @test_slack_id = "luckynumber13" + @test_topic = "Awesome existence" + @test_member_count = "9" + end + + it "verifies that attempting to initialize an instance of Channel without appropriate data throws an ArgumentError" do + integer_name = 00132 + expect{ + @test_channel = User.new(name: integer_name , slack_id: @test_slack_id, topic: @test_topic, member_count: @@test_member_count) + }.must_raise ArgumentError + + integer_slack_id = 13 + expect{ + @test_channel = User.new(name: @test_name, slack_id: integer_slack_id, topic: @test_topic, member_count: @@test_member_count) + }.must_raise ArgumentError + + array_topic = ["awesome", "pawsome"] + expect{ + @test_channel = User.new(name: @test_name, slack_id: @test_slack_id, topic: array_topic , member_count: @@test_member_count) + }.must_raise ArgumentError + + integer_member_count = 99443 + expect{ + @test_channel = User.new(name: @test_name, slack_id: @test_slack_id, topic: @test_topic, member_count: integer_member_count) + }.must_raise ArgumentError + end +end + +describe "instances of user initiate properly using manually passed in data" do + + before do + @test_name = "Awesome" + @test_slack_id = "luckynumber13" + @test_topic = "Awesome existence" + @test_member_count = "9" + + @test_channel = User.new(name: @test_name, slack_id: @test_slack_id, topic: @test_topic, member_count: @@test_member_count + end + + it "verify initialization of User" do + + expect(@test_channel).must_be_kind_of Channel + expect(@test_channel.name).must_equal @test_name + expect(@test_channel.slack_id).must_equal @test_slack_id + expect(@test_channel.topic).must_equal @test_topic + expect(@test_channel.member_count).must_equal @test_member_count + + end + + describe "fleshed-out methods of being able to provide a detailed summary" do + end + + describe "fleshed-out methods of being able to make a list of instances of itself" do + end + + describe "instances of user can initiate from API and parse the data" do + + + #Any tests involving a User should use the username SlackBot + + before do + end + + it "is a test, maybe?" + + end + + # describe "" + + describe "user attributes and behaviors" do + + before do + end + + it "is a test, maybe?" + VCR.use_cassette("slack_info") do + end + end + + describe "user attributes and behaviors" do + + before do + end + + it "is a test, maybe?" + VCR.use_cassette("slack_info") do + end + end + end \ No newline at end of file From d63d557563d491686a3e8a144e4d3b16363e3da2 Mon Sep 17 00:00:00 2001 From: CEsGutierrez <45987016+CEsGutierrez@users.noreply.github.com> Date: Wed, 11 Sep 2019 16:09:16 -0700 Subject: [PATCH 15/32] Delete cassettes.yml From 405410e0816a7f42c2e2d50d04851eb686707c72 Mon Sep 17 00:00:00 2001 From: Vi Date: Thu, 12 Sep 2019 10:03:09 -0700 Subject: [PATCH 16/32] updated test_helper to hide token from cassette --- test/test_helper.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/test_helper.rb b/test/test_helper.rb index 8cd12dcc..3fe19d27 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -15,6 +15,10 @@ VCR.configure do |config| config.cassette_library_dir = "test/cassettes" config.hook_into :webmock + + config.filter_sensitive_data "" do + ENV("SLACK_TOKEN") + end end require_relative '../lib/channel' From a0f18fe693ec0fc77cfb0b2428f1d15e236d1b2f Mon Sep 17 00:00:00 2001 From: Vi Date: Thu, 12 Sep 2019 14:05:34 -0700 Subject: [PATCH 17/32] updated test helper and started channel initialization method --- lib/channel.rb | 9 +++++ lib/user.rb | 3 +- test/channel_test.rb | 85 ++++++++++++++++++++++---------------------- test/test_helper.rb | 6 ++++ 4 files changed, 58 insertions(+), 45 deletions(-) diff --git a/lib/channel.rb b/lib/channel.rb index 9ed8441d..d60088c3 100644 --- a/lib/channel.rb +++ b/lib/channel.rb @@ -1,4 +1,13 @@ class Channel + #If inheriting from parent class, do I need to include inherited keyword arguments? + + def initialize(name:, slack_id:, topic:, member_count:) + @name = name + @slack_id = slack_id + @topic = topic + @member_count = member_count + end + end \ No newline at end of file diff --git a/lib/user.rb b/lib/user.rb index 6c08e1e5..ee447122 100644 --- a/lib/user.rb +++ b/lib/user.rb @@ -15,8 +15,7 @@ def initialize(name:, slack_id:, real_name:, status_text:, status_emoji:) raise ArgumentError.new "Wrong format for status initialization" end @status_text = status_text - - #Verify here that status emoji contains : at the beginning and end of the string + if status_emoji[0] != ":" || status_emoji[-1] != ":" raise ArgumentError.new "Wrong format for emoji initialization" end diff --git a/test/channel_test.rb b/test/channel_test.rb index 2fd9e9e8..2cf79c78 100644 --- a/test/channel_test.rb +++ b/test/channel_test.rb @@ -11,9 +11,6 @@ end - - - require_relative 'test_helper' describe "instances of channel initiate " do @@ -28,22 +25,22 @@ it "verifies that attempting to initialize an instance of Channel without appropriate data throws an ArgumentError" do integer_name = 00132 expect{ - @test_channel = User.new(name: integer_name , slack_id: @test_slack_id, topic: @test_topic, member_count: @@test_member_count) + @test_channel = Channel.new(name: integer_name , slack_id: @test_slack_id, topic: @test_topic, member_count: @@test_member_count) }.must_raise ArgumentError integer_slack_id = 13 expect{ - @test_channel = User.new(name: @test_name, slack_id: integer_slack_id, topic: @test_topic, member_count: @@test_member_count) + @test_channel = Channel.new(name: @test_name, slack_id: integer_slack_id, topic: @test_topic, member_count: @@test_member_count) }.must_raise ArgumentError array_topic = ["awesome", "pawsome"] expect{ - @test_channel = User.new(name: @test_name, slack_id: @test_slack_id, topic: array_topic , member_count: @@test_member_count) + @test_channel = Channel.new(name: @test_name, slack_id: @test_slack_id, topic: array_topic , member_count: @@test_member_count) }.must_raise ArgumentError integer_member_count = 99443 expect{ - @test_channel = User.new(name: @test_name, slack_id: @test_slack_id, topic: @test_topic, member_count: integer_member_count) + @test_channel = Channel.new(name: @test_name, slack_id: @test_slack_id, topic: @test_topic, member_count: integer_member_count) }.must_raise ArgumentError end end @@ -56,56 +53,58 @@ @test_topic = "Awesome existence" @test_member_count = "9" - @test_channel = User.new(name: @test_name, slack_id: @test_slack_id, topic: @test_topic, member_count: @@test_member_count - end + @test_channel = User.new(name: @test_name, slack_id: @test_slack_id, topic: @test_topic, member_count: @test_member_count) + end - it "verify initialization of User" do + it "verify initialization of User" do - expect(@test_channel).must_be_kind_of Channel - expect(@test_channel.name).must_equal @test_name - expect(@test_channel.slack_id).must_equal @test_slack_id - expect(@test_channel.topic).must_equal @test_topic - expect(@test_channel.member_count).must_equal @test_member_count + expect(@test_channel).must_be_kind_of Channel + expect(@test_channel.name).must_equal @test_name + expect(@test_channel.slack_id).must_equal @test_slack_id + expect(@test_channel.topic).must_equal @test_topic + expect(@test_channel.member_count).must_equal @test_member_count - end - - describe "fleshed-out methods of being able to provide a detailed summary" do - end + end +end +# describe "fleshed-out methods of being able to provide a detailed summary" do +# end - describe "fleshed-out methods of being able to make a list of instances of itself" do - end +# describe "fleshed-out methods of being able to make a list of instances of itself" do +# end - describe "instances of user can initiate from API and parse the data" do +# describe "instances of user can initiate from API and parse the data" do - #Any tests involving a User should use the username SlackBot +# #Any tests involving a User should use the username SlackBot - before do - end +# before do +# end - it "is a test, maybe?" +# it "is a test, maybe?" do - end +# end - # describe "" +# # describe "" - describe "user attributes and behaviors" do +# describe "user attributes and behaviors" do - before do - end +# before do +# end - it "is a test, maybe?" - VCR.use_cassette("slack_info") do - end - end +# it "is a test, maybe?" do +# VCR.use_cassette("slack_info") do +# end +# end +# end - describe "user attributes and behaviors" do +# describe "user attributes and behaviors" do - before do - end +# before do +# end - it "is a test, maybe?" - VCR.use_cassette("slack_info") do - end - end - end \ No newline at end of file +# it "is a test, maybe?" do +# VCR.use_cassette("slack_info") do +# end +# end +# end +# end \ No newline at end of file diff --git a/test/test_helper.rb b/test/test_helper.rb index 3fe19d27..060cc830 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -9,12 +9,18 @@ require 'minitest/reporters' require 'minitest/skip_dsl' require 'vcr' +require 'dotenv' + +Dotenv.load Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new VCR.configure do |config| config.cassette_library_dir = "test/cassettes" config.hook_into :webmock + config.default_cassette_options = { + record: :new_episodes, # record new data when we don't have it + } config.filter_sensitive_data "" do ENV("SLACK_TOKEN") From bf0662dfe4c382e741fdb73806aee08f7ac385ca Mon Sep 17 00:00:00 2001 From: Vi Date: Thu, 12 Sep 2019 14:49:25 -0700 Subject: [PATCH 18/32] fixing channel tests --- lib/channel.rb | 17 +++-- lib/recipient.rb | 6 +- lib/user.rb | 38 ++++++------ lib/workspace.rb | 145 ++++++++++++++++++++++++------------------- test/channel_test.rb | 81 +++++++++++------------- test/test_helper.rb | 2 +- 6 files changed, 152 insertions(+), 137 deletions(-) diff --git a/lib/channel.rb b/lib/channel.rb index d60088c3..57ef0a2a 100644 --- a/lib/channel.rb +++ b/lib/channel.rb @@ -1,13 +1,20 @@ class Channel - - + + #If inheriting from parent class, do I need to include inherited keyword arguments? def initialize(name:, slack_id:, topic:, member_count:) - @name = name - @slack_id = slack_id + + + if topic.class != String + raise ArgumentError.new, "Wrong format for topic!" + end @topic = topic + + if member_count.class != Integer + raise ArgumentError.new, "Wrong format for member count!" + end @member_count = member_count end - + end \ No newline at end of file diff --git a/lib/recipient.rb b/lib/recipient.rb index d31e6bd8..f1895ea5 100644 --- a/lib/recipient.rb +++ b/lib/recipient.rb @@ -5,12 +5,12 @@ class Recipient def initialize (name:, slack_id:) if name.class != String - raise ArgumentError.new "wrong format for initiating name" + raise ArgumentError.new, "wrong format for initiating name" end @name = name - if slack_id.class != String - raise ArgumentError.new "wrong format for initiating id" + if slack_id.class != String + raise ArgumentError.new, "wrong format for initiating id" end @slack_id = slack_id diff --git a/lib/user.rb b/lib/user.rb index ee447122..68399299 100644 --- a/lib/user.rb +++ b/lib/user.rb @@ -1,24 +1,26 @@ class User - - attr_reader :name, :slack_id, :real_name, :status_text, :status_emoji - - def initialize(name:, slack_id:, real_name:, status_text:, status_emoji:) - @name = name - @slack_id = slack_id - if real_name.class != String - raise ArgumentError.new "Wrong format for real name initialization" - end - @real_name = real_name + attr_reader :name, :slack_id, :real_name, :status_text, :status_emoji - if status_text.class != String - raise ArgumentError.new "Wrong format for status initialization" + def initialize(name:, slack_id:, real_name:, status_text:, status_emoji:) + @name = name + @slack_id = slack_id + + if real_name.class != String + raise ArgumentError.new "Wrong format for real name initialization" + end + @real_name = real_name + + if status_text.class != String + raise ArgumentError.new "Wrong format for status initialization" + end + @status_text = status_text + + if status_emoji[0] != ":" || status_emoji[-1] != ":" + raise ArgumentError.new "Wrong format for emoji initialization" + end + @status_emoji = status_emoji end - @status_text = status_text - if status_emoji[0] != ":" || status_emoji[-1] != ":" - raise ArgumentError.new "Wrong format for emoji initialization" - end - @status_emoji = status_emoji - end + end \ No newline at end of file diff --git a/lib/workspace.rb b/lib/workspace.rb index 33eb1b78..7f986ac5 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -5,68 +5,85 @@ Dotenv.load class Workspace - - attr_reader :users, :channels - - def initialize - @users = [] - @channels = [] - - #method call to initiate calling API to populate users and channels to display the initial # of them - - # api_call_list_channels - # api_call_list_users - end - - def api_call_list_users - #This method takes in the entire listuser api - url = "https://slack.com/api/users.list" - api_key = ENV['SLACK_TOKEN'] - - query_parameters = {"token" => api_key} - - user_response = HTTParty.get(url, query: query_parameters) - - return user_response["ok"] == true - - end - - # def api_call_listchannels(channel) - # #This method takes in the entire listchannel api - # # url = "whatever_whatever" - - # # parameters - - # #have our method call - # #using response, pass it to make channels - - # # make channels - # return channel_response - # end - - - # def make_users(user_response) - # # response["members"].each |user| - # # name = user["name"] - - - - #calling users instance variable - - # make instances of users using the data from api_call - - # store instances of users using the data from api_call - - # end - - def make_channels(channel_response) - - - #parse data here into objects - - # make instances of channels using the data from api_call - - #store instances of channels using the data from api_call - - end + + attr_reader :users, :channels + + def initialize + @users = [] + @channels = [] + + #method call to initiate calling API to populate users and channels to display the initial # of them + + # api_call_list_channels + # api_call_list_users + end + + def api_call_list_users + #This method takes in the entire listuser api + url = "https://slack.com/api/users.list" + api_key = ENV['SLACK_TOKEN'] + + query_parameters = {"token" => api_key} + + user_response = HTTParty.get(url, query: query_parameters) + + user_response["members"].each do |member| + + user_name = user_response["name"] + user_slack_id = user_response["id"] + user_real_name = user_response["real_name"] + user_status_text = user_response["profile"]["status_text"] + user_status_emoji = user_response["profile"]["status_emoji"] + + new_user = User.new(name: user_name, slack_id: user_slack_id, real_name: user_real_name, status_text: user_status_text, status_emoji: user_status_emoji) + + + + puts new_user + + @users << new_user + + end + + return user_response["ok"] == true + + end + + # def api_call_listchannels(channel) + # #This method takes in the entire listchannel api + # # url = "whatever_whatever" + + # # parameters + + # #have our method call + # #using response, pass it to make channels + + # # make channels + # return channel_response + # end + + + # def make_users(user_response) + # # response["members"].each |user| + # # name = user["name"] + + + + #calling users instance variable + + # make instances of users using the data from api_call + + # store instances of users using the data from api_call + + # end + + def make_channels(channel_response) + + #parse data here into objects + + # make instances of channels using the data from api_call + + #store instances of channels using the data from api_call + + end end \ No newline at end of file diff --git a/test/channel_test.rb b/test/channel_test.rb index 048ac143..9c64aeca 100644 --- a/test/channel_test.rb +++ b/test/channel_test.rb @@ -1,45 +1,34 @@ require_relative 'test_helper' -describe "channel attributes and behaviors" do - - before do - end - - it "is a test, maybe?" do - end - - -end - describe "instances of channel initiate " do #throws all sorts of errors for missing or mis-classed information before do @test_name = "Awesome" @test_slack_id = "luckynumber13" @test_topic = "Awesome existence" - @test_member_count = "9" + @test_member_count = 9 end it "verifies that attempting to initialize an instance of Channel without appropriate data throws an ArgumentError" do integer_name = 00132 - expect{ - @test_channel = Channel.new(name: integer_name , slack_id: @test_slack_id, topic: @test_topic, member_count: @@test_member_count) - }.must_raise ArgumentError + test_channel = Channel.new(name: integer_name, slack_id: @test_slack_id, topic: @test_topic, member_count: @test_member_count) - integer_slack_id = 13 - expect{ - @test_channel = Channel.new(name: @test_name, slack_id: integer_slack_id, topic: @test_topic, member_count: @@test_member_count) - }.must_raise ArgumentError + expect{ test_channel }.must_raise ArgumentError - array_topic = ["awesome", "pawsome"] - expect{ - @test_channel = Channel.new(name: @test_name, slack_id: @test_slack_id, topic: array_topic , member_count: @@test_member_count) - }.must_raise ArgumentError + # integer_slack_id = 13 + # expect{ + # @test_channel = Channel.new(name: @test_name, slack_id: integer_slack_id, topic: @test_topic, member_count: @test_member_count) + # }.must_raise ArgumentError - integer_member_count = 99443 - expect{ - @test_channel = Channel.new(name: @test_name, slack_id: @test_slack_id, topic: @test_topic, member_count: integer_member_count) - }.must_raise ArgumentError + # array_topic = ["awesome", "pawsome"] + # expect{ + # @test_channel = Channel.new(name: @test_name, slack_id: @test_slack_id, topic: array_topic , member_count: @test_member_count) + # }.must_raise ArgumentError + + # integer_member_count = 99443 + # expect{ + # @test_channel = Channel.new(name: @test_name, slack_id: @test_slack_id, topic: @test_topic, member_count: integer_member_count) + # }.must_raise ArgumentError end end @@ -47,59 +36,59 @@ before do @test_name = "Awesome" - @test_slack_id = "luckynumber13" + @test_slack_id = "3456713" @test_topic = "Awesome existence" - @test_member_count = "9" + @test_member_count = 9 @test_channel = Channel.new(name: @test_name, slack_id: @test_slack_id, topic: @test_topic, member_count: @test_member_count) end - + it "verify initialization of Channel" do - + expect(@test_channel).must_be_kind_of Channel expect(@test_channel.name).must_equal @test_name expect(@test_channel.slack_id).must_equal @test_slack_id expect(@test_channel.topic).must_equal @test_topic expect(@test_channel.member_count).must_equal @test_member_count - + end end # describe "fleshed-out methods of being able to provide a detailed summary" do # end - + # describe "fleshed-out methods of being able to make a list of instances of itself" do # end - + # describe "instances of user can initiate from API and parse the data" do - - + + # #Any tests involving a User should use the username SlackBot - + # before do # end - + # it "is a test, maybe?" do - + # end - + # # describe "" - + # describe "user attributes and behaviors" do - + # before do # end - + # it "is a test, maybe?" do # VCR.use_cassette("slack_info") do # end # end # end - + # describe "user attributes and behaviors" do - + # before do # end - + # it "is a test, maybe?" do # VCR.use_cassette("slack_info") do # end diff --git a/test/test_helper.rb b/test/test_helper.rb index 060cc830..6ea775ad 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -23,7 +23,7 @@ } config.filter_sensitive_data "" do - ENV("SLACK_TOKEN") + ENV["SLACK_TOKEN"] end end From d046633fbdbc0f1c02ccd13be6903513054e1a6d Mon Sep 17 00:00:00 2001 From: Vi Date: Thu, 12 Sep 2019 15:06:35 -0700 Subject: [PATCH 19/32] finished channel initialization tests --- lib/channel.rb | 12 +++++++++++- test/channel_test.rb | 28 ++++++++++++++-------------- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/lib/channel.rb b/lib/channel.rb index 57ef0a2a..d8a0d7b1 100644 --- a/lib/channel.rb +++ b/lib/channel.rb @@ -1,11 +1,21 @@ class Channel - + attr_reader :name, :slack_id, :topic, :member_count + #If inheriting from parent class, do I need to include inherited keyword arguments? def initialize(name:, slack_id:, topic:, member_count:) + if name.class != String + raise ArgumentError.new, "wrong format for initiating name" + end + @name = name + if slack_id.class != String + raise ArgumentError.new, "wrong format for initiating id" + end + @slack_id = slack_id + if topic.class != String raise ArgumentError.new, "Wrong format for topic!" end diff --git a/test/channel_test.rb b/test/channel_test.rb index 9c64aeca..fe683bb9 100644 --- a/test/channel_test.rb +++ b/test/channel_test.rb @@ -11,24 +11,24 @@ it "verifies that attempting to initialize an instance of Channel without appropriate data throws an ArgumentError" do integer_name = 00132 + expect{ test_channel = Channel.new(name: integer_name, slack_id: @test_slack_id, topic: @test_topic, member_count: @test_member_count) + }.must_raise ArgumentError - expect{ test_channel }.must_raise ArgumentError + integer_slack_id = 13 + expect{ + @test_channel = Channel.new(name: @test_name, slack_id: integer_slack_id, topic: @test_topic, member_count: @test_member_count) + }.must_raise ArgumentError - # integer_slack_id = 13 - # expect{ - # @test_channel = Channel.new(name: @test_name, slack_id: integer_slack_id, topic: @test_topic, member_count: @test_member_count) - # }.must_raise ArgumentError + array_topic = ["awesome", "pawsome"] + expect{ + @test_channel = Channel.new(name: @test_name, slack_id: @test_slack_id, topic: array_topic , member_count: @test_member_count) + }.must_raise ArgumentError - # array_topic = ["awesome", "pawsome"] - # expect{ - # @test_channel = Channel.new(name: @test_name, slack_id: @test_slack_id, topic: array_topic , member_count: @test_member_count) - # }.must_raise ArgumentError - - # integer_member_count = 99443 - # expect{ - # @test_channel = Channel.new(name: @test_name, slack_id: @test_slack_id, topic: @test_topic, member_count: integer_member_count) - # }.must_raise ArgumentError + string_member_count = "99443" + expect{ + @test_channel = Channel.new(name: @test_name, slack_id: @test_slack_id, topic: @test_topic, member_count: string_member_count) + }.must_raise ArgumentError end end From 4bc80d9f6081a5c485acaea8b3c5d9e714b51ea4 Mon Sep 17 00:00:00 2001 From: C Gutierrez Date: Thu, 12 Sep 2019 15:07:42 -0700 Subject: [PATCH 20/32] working on parsing API information --- lib/workspace.rb | 37 +++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/lib/workspace.rb b/lib/workspace.rb index 7f986ac5..4787e048 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -4,6 +4,8 @@ require 'dotenv' Dotenv.load +require 'pry' + class Workspace attr_reader :users, :channels @@ -26,23 +28,30 @@ def api_call_list_users query_parameters = {"token" => api_key} user_response = HTTParty.get(url, query: query_parameters) - - user_response["members"].each do |member| - - user_name = user_response["name"] - user_slack_id = user_response["id"] - user_real_name = user_response["real_name"] - user_status_text = user_response["profile"]["status_text"] - user_status_emoji = user_response["profile"]["status_emoji"] - - new_user = User.new(name: user_name, slack_id: user_slack_id, real_name: user_real_name, status_text: user_status_text, status_emoji: user_status_emoji) + # binding.pry + total_users = user_response["members"].length + i = 0 + until i == total_users do + ser_name = user_response["members"][i]["name"] + user_slack_id = user_response[i]["id"] + user_real_name = user_response["real_name"] + user_status_text = user_response["profile"]["status_text"] + user_status_emoji = user_response["profile"]["status_emoji"] + + new_user = User.new(name: user_name, slack_id: user_slack_id, real_name: user_real_name, status_text: user_status_text, status_emoji: user_status_emoji) + + + + puts new_user + + @users << new_user + + i += 1 + + end - puts new_user - - @users << new_user - end return user_response["ok"] == true From a7a1924bd5e57e94209bf7c4ea809af300a3a115 Mon Sep 17 00:00:00 2001 From: C Gutierrez Date: Thu, 12 Sep 2019 15:30:45 -0700 Subject: [PATCH 21/32] used API to make instances of User. Adjusted test and code in channel to match format --- lib/user.rb | 4 +-- lib/workspace.rb | 70 +++++++++++++----------------------------- test/channel_test.rb | 2 +- test/workspace_test.rb | 24 +++------------ 4 files changed, 28 insertions(+), 72 deletions(-) diff --git a/lib/user.rb b/lib/user.rb index 68399299..9eb59b6e 100644 --- a/lib/user.rb +++ b/lib/user.rb @@ -16,8 +16,8 @@ def initialize(name:, slack_id:, real_name:, status_text:, status_emoji:) end @status_text = status_text - if status_emoji[0] != ":" || status_emoji[-1] != ":" - raise ArgumentError.new "Wrong format for emoji initialization" + if status_emoji.class != String + raise ArgumentError.new "Wrong format for emoji input!" end @status_emoji = status_emoji end diff --git a/lib/workspace.rb b/lib/workspace.rb index 4787e048..9c8672cf 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -29,62 +29,34 @@ def api_call_list_users user_response = HTTParty.get(url, query: query_parameters) # binding.pry + make_users(user_response) - total_users = user_response["members"].length + return user_response["ok"] == true + end + + def make_users(response) + + total_users = response["members"].length i = 0 - - until i == total_users do - ser_name = user_response["members"][i]["name"] - user_slack_id = user_response[i]["id"] - user_real_name = user_response["real_name"] - user_status_text = user_response["profile"]["status_text"] - user_status_emoji = user_response["profile"]["status_emoji"] - - new_user = User.new(name: user_name, slack_id: user_slack_id, real_name: user_real_name, status_text: user_status_text, status_emoji: user_status_emoji) - - - - puts new_user - - @users << new_user - - i += 1 - - end + # binding.pry + until i == total_users do + user_name = response["members"][i]["name"] + user_slack_id = response["members"][i]["id"] + user_real_name = response["members"][i]["real_name"] + user_status_text = response["members"][i]["profile"]["status_text"] + user_status_emoji = response["members"][i]["profile"]["status_emoji"] + + new_user = User.new(name: user_name, slack_id: user_slack_id, real_name: user_real_name, status_text: user_status_text, status_emoji: user_status_emoji) + + @users << new_user + + i += 1 end - return user_response["ok"] == true - - end - - # def api_call_listchannels(channel) - # #This method takes in the entire listchannel api - # # url = "whatever_whatever" - - # # parameters - - # #have our method call - # #using response, pass it to make channels - - # # make channels - # return channel_response - # end - - - # def make_users(user_response) - # # response["members"].each |user| - # # name = user["name"] - - - - #calling users instance variable - - # make instances of users using the data from api_call + end - # store instances of users using the data from api_call - # end def make_channels(channel_response) diff --git a/test/channel_test.rb b/test/channel_test.rb index fe683bb9..9dde005e 100644 --- a/test/channel_test.rb +++ b/test/channel_test.rb @@ -12,7 +12,7 @@ it "verifies that attempting to initialize an instance of Channel without appropriate data throws an ArgumentError" do integer_name = 00132 expect{ - test_channel = Channel.new(name: integer_name, slack_id: @test_slack_id, topic: @test_topic, member_count: @test_member_count) + test_channel = Channel.new(name: integer_name, slack_id: @test_slack_id, topic: @test_topic, member_count: @test_member_count) }.must_raise ArgumentError integer_slack_id = 13 diff --git a/test/workspace_test.rb b/test/workspace_test.rb index d4f91f09..24e61606 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -2,41 +2,25 @@ describe "workplace attributes" do before do - # VCR.use_cassette("cassettes") do @test_workspace = Workspace.new end - # end it "recognizes that it's an instance of Workspace" do - @test_workspace = Workspace.new expect(@test_workspace).must_be_kind_of Workspace - end - - it "will hold an array of users which will be initially empty" do #temporary test - @test_workspace = Workspace.new expect(@test_workspace.users).must_be_kind_of Array - expect(@test_workspace.users).must_be_empty - end - - it "will hold an array of channels which will be initially empty" do #temporary test - @test_workspace = Workspace.new expect(@test_workspace.channels).must_be_kind_of Array - expect(@test_workspace.channels).must_be_empty end - end describe "workplace behavior in talking to Slack API" do - # before do - # VCR.use_cassette("cassettes") do - # @test_workspace = Workspace.new - # end - # end + before do + @test_workspace = Workspace.new + end + end it "will call Slack API succesfully" do VCR.use_cassette("cassettes") do - @test_workspace = Workspace.new expect(@test_workspace.api_call_list_users).must_equal true end end From 802e347e750a14608976050730235cef642f304f Mon Sep 17 00:00:00 2001 From: C Gutierrez Date: Thu, 12 Sep 2019 16:05:04 -0700 Subject: [PATCH 22/32] added API calls, parsing and initiation of instances of User and Channel to Workspace --- lib/workspace.rb | 39 ++++++++++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/lib/workspace.rb b/lib/workspace.rb index 9c8672cf..331641db 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -16,8 +16,8 @@ def initialize #method call to initiate calling API to populate users and channels to display the initial # of them - # api_call_list_channels - # api_call_list_users + api_call_list_channels + api_call_list_users end def api_call_list_users @@ -28,7 +28,6 @@ def api_call_list_users query_parameters = {"token" => api_key} user_response = HTTParty.get(url, query: query_parameters) - # binding.pry make_users(user_response) return user_response["ok"] == true @@ -38,8 +37,7 @@ def make_users(response) total_users = response["members"].length i = 0 - # binding.pry - until i == total_users do + until i == total_users user_name = response["members"][i]["name"] user_slack_id = response["members"][i]["id"] user_real_name = response["members"][i]["real_name"] @@ -56,15 +54,34 @@ def make_users(response) end + def api_call_list_channels + #This method takes in the entire listuser api + url = "https://slack.com/api/conversations.list" + api_key = ENV['SLACK_TOKEN'] + query_parameters = {"token" => api_key} + channel_response = HTTParty.get(url, query: query_parameters) + make_channels(channel_response) + return channel_response["ok"] == true + + end - def make_channels(channel_response) - - #parse data here into objects - - # make instances of channels using the data from api_call + def make_channels(response) - #store instances of channels using the data from api_call + total_channels = response["channels"].length + i = 0 + until i == total_channels + channel_name = response["channels"][i]["name"] + channel_slack_id = response["channels"][i]["id"] + channel_topic = response["channels"][i]["topic"]["value"] + channel_member_count = response["channels"][i]["num_members"] + + new_channel = Channel.new(name: channel_name, slack_id: channel_slack_id, topic: channel_topic, member_count: channel_member_count) + + @channels << new_channel + + i += 1 + end end end \ No newline at end of file From ff07dd13842f3f7dca7857c2e6c44cd3f7fa614b Mon Sep 17 00:00:00 2001 From: Vi Date: Thu, 12 Sep 2019 16:06:14 -0700 Subject: [PATCH 23/32] changes to workspace test --- lib/workspace.rb | 6 ++-- test/workspace_test.rb | 63 +++++++++++++++++++++--------------------- 2 files changed, 35 insertions(+), 34 deletions(-) diff --git a/lib/workspace.rb b/lib/workspace.rb index 9c8672cf..85c9351f 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -16,8 +16,7 @@ def initialize #method call to initiate calling API to populate users and channels to display the initial # of them - # api_call_list_channels - # api_call_list_users + api_call_list_users end def api_call_list_users @@ -28,7 +27,8 @@ def api_call_list_users query_parameters = {"token" => api_key} user_response = HTTParty.get(url, query: query_parameters) - # binding.pry + + puts user_response make_users(user_response) return user_response["ok"] == true diff --git a/test/workspace_test.rb b/test/workspace_test.rb index 24e61606..5f70413f 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -1,37 +1,38 @@ require_relative 'test_helper' -describe "workplace attributes" do - before do - @test_workspace = Workspace.new - end - - it "recognizes that it's an instance of Workspace" do - expect(@test_workspace).must_be_kind_of Workspace - expect(@test_workspace.users).must_be_kind_of Array - expect(@test_workspace.channels).must_be_kind_of Array - end -end - -describe "workplace behavior in talking to Slack API" do - +describe 'workplace class' do before do @test_workspace = Workspace.new - end - end - - it "will call Slack API succesfully" do - VCR.use_cassette("cassettes") do - expect(@test_workspace.api_call_list_users).must_equal true end - end - - - it "it will parse API data to retain necessary details about users" do - VCR.use_cassette("slack_info") do - #expecting to have to parse the data from Slack API into something that's recognizable wherein "name" has a predictable value (will be checked against information in Postman) + + describe "workplace attributes" do + it "recognizes that it's an instance of Workspace" do + VCR.use_cassette("initialize") do + expect(@test_workspace).must_be_kind_of Workspace + expect(@test_workspace.users).must_be_kind_of Array + expect(@test_workspace.channels).must_be_kind_of Array + end + end + end + + describe "workplace behavior in talking to Slack API" do + it "will call Slack API succesfully" do + VCR.use_cassette("api_call_list_users") do + expect(@test_workspace.api_call_list_users).must_equal true + end + end + end + + describe "make_users" do + #This checks our make_users method because users is an array of user objects populated by the make_users method + it "parses user API accurately into new User objects" do + users = test_workspace.users[0] + expect(users).must_be_kind_of User + #expecting to have to parse the data from Slack API into something that's recognizable wherein "name" has a predictable value (will be checked against information in Postman) + end end - end - - - # upon request, will use Slack API data to interact with / as a user or channel -end +end + +# describe "list " +# # upon request, will use Slack API data to interact with / as a user or channel +# end From af96605265103b025dd20d826c73e77ad20946e4 Mon Sep 17 00:00:00 2001 From: C Gutierrez Date: Thu, 12 Sep 2019 16:09:15 -0700 Subject: [PATCH 24/32] temporary changes to workspace_test --- test/workspace_test.rb | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/test/workspace_test.rb b/test/workspace_test.rb index 24e61606..99805d22 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -2,7 +2,9 @@ describe "workplace attributes" do before do - @test_workspace = Workspace.new + VCR.use_cassette("slack_info") do + @test_workspace = Workspace.new + end end it "recognizes that it's an instance of Workspace" do @@ -14,24 +16,27 @@ describe "workplace behavior in talking to Slack API" do - before do - @test_workspace = Workspace.new - end + before do + VCR.use_cassette("slack_info") do + @test_workspace = Workspace.new end + end + + it "will call Slack API succesfully" do - VCR.use_cassette("cassettes") do - expect(@test_workspace.api_call_list_users).must_equal true - end + + expect(@test_workspace.api_call_list_users).must_equal true + end it "it will parse API data to retain necessary details about users" do - VCR.use_cassette("slack_info") do - #expecting to have to parse the data from Slack API into something that's recognizable wherein "name" has a predictable value (will be checked against information in Postman) - end + + # #expecting to have to parse the data from Slack API into something that's recognizable wherein "name" has a predictable value (will be checked against information in Postman) + end - - # upon request, will use Slack API data to interact with / as a user or channel end +# upon request, will use Slack API data to interact with / as a user or channel +# end From 8875a1049a5764c376e8d42066c63a3691ba9764 Mon Sep 17 00:00:00 2001 From: Vi Date: Thu, 12 Sep 2019 17:44:19 -0700 Subject: [PATCH 25/32] slack ui wave 1 functionality completed --- lib/channel.rb | 4 +-- lib/slack.rb | 38 +++++++++++++++++++++-- lib/workspace.rb | 22 +++++++++++-- test/slack_test.rb | 15 ++++++--- test/workspace_test.rb | 70 +++++++++++++++++++++++++++++++++--------- 5 files changed, 123 insertions(+), 26 deletions(-) diff --git a/lib/channel.rb b/lib/channel.rb index d8a0d7b1..751d5240 100644 --- a/lib/channel.rb +++ b/lib/channel.rb @@ -1,7 +1,7 @@ class Channel attr_reader :name, :slack_id, :topic, :member_count - + #If inheriting from parent class, do I need to include inherited keyword arguments? def initialize(name:, slack_id:, topic:, member_count:) @@ -15,7 +15,7 @@ def initialize(name:, slack_id:, topic:, member_count:) raise ArgumentError.new, "wrong format for initiating id" end @slack_id = slack_id - + if topic.class != String raise ArgumentError.new, "Wrong format for topic!" end diff --git a/lib/slack.rb b/lib/slack.rb index 960cf2f7..6c9164e3 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -1,10 +1,42 @@ #!/usr/bin/env ruby +require_relative 'workspace' def main puts "Welcome to the Ada Slack CLI!" - - # TODO project - + + # Initializes a new workspace + workspace = Workspace.new + + #Ternary statement to add 's' for more than 1 user + puts "There are #{workspace.users.length} user(s) in your workplace." + + puts "There are #{workspace.channels.length} channel(s) in your workspace." + + loop_options = ["1. List users", "2. List channels", "3. Quit"] + + puts "\nPlease select from one of the following options by choosing its corresponding number: " + loop_options.each do |option| + puts "\t #{option}" + end + input = gets.chomp.downcase + + until input == "quit" || input == "3" do + case input + when "1" + puts workspace.all_user_names + input = nil + when "2" + puts workspace.all_channel_names + input = nil + else + print "\nPlease select from one of the following options by choosing its corresponding number: " + loop_options.each do |option| + puts "\t #{option}" + end + eval = nil + input = gets.chomp.downcase + end + end puts "Thank you for using the Ada Slack CLI" end diff --git a/lib/workspace.rb b/lib/workspace.rb index 79f40cd9..250e50c8 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -15,10 +15,29 @@ def initialize @channels = [] #method call to initiate calling API to populate users and channels to display the initial # of them - api_call_list_users + api_call_list_channels end + + def all_user_names + all_user_names = [] + + users.each do |user| + all_user_names << user.name + end + return all_user_names + end + + def all_channel_names + all_channel_names = [] + + channels.each do |channel| + all_channel_names << channel.name + end + return all_channel_names + end + def api_call_list_users #This method takes in the entire listuser api url = "https://slack.com/api/users.list" @@ -28,7 +47,6 @@ def api_call_list_users user_response = HTTParty.get(url, query: query_parameters) - puts user_response make_users(user_response) return user_response["ok"] == true diff --git a/test/slack_test.rb b/test/slack_test.rb index 105a066c..ff27c7bb 100644 --- a/test/slack_test.rb +++ b/test/slack_test.rb @@ -2,12 +2,17 @@ describe "slack attributes and behaviors" do - before do + it "main displays for the user the number of users available" do + + #No test for display :/ end - - it "is a test, maybe?" - VCR.use_cassette("slack_info") do + it "main displays for the user the number of channels available" do + #No test for display :/ end - + + it "main displays for the user possible interactions a person can have" do + #No test for display :/ + end + end \ No newline at end of file diff --git a/test/workspace_test.rb b/test/workspace_test.rb index 5f70413f..64ce6c28 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -1,38 +1,80 @@ require_relative 'test_helper' describe 'workplace class' do - before do - @test_workspace = Workspace.new - end - + # before do + # @test_workspace = Workspace.new + # end + describe "workplace attributes" do it "recognizes that it's an instance of Workspace" do VCR.use_cassette("initialize") do - expect(@test_workspace).must_be_kind_of Workspace - expect(@test_workspace.users).must_be_kind_of Array - expect(@test_workspace.channels).must_be_kind_of Array + @test_workspace = Workspace.new + + expect(@test_workspace).must_be_kind_of Workspace + expect(@test_workspace.users).must_be_kind_of Array + expect(@test_workspace.channels).must_be_kind_of Array end end end - + describe "workplace behavior in talking to Slack API" do it "will call Slack API succesfully" do VCR.use_cassette("api_call_list_users") do - expect(@test_workspace.api_call_list_users).must_equal true + @test_workspace = Workspace.new + expect(@test_workspace.api_call_list_users).must_equal true end end end - + + #expecting to have to parse the data from Slack API into something that's recognizable wherein "name" has a predictable value (will be checked against information in Postman) describe "make_users" do #This checks our make_users method because users is an array of user objects populated by the make_users method it "parses user API accurately into new User objects" do - users = test_workspace.users[0] - expect(users).must_be_kind_of User - #expecting to have to parse the data from Slack API into something that's recognizable wherein "name" has a predictable value (will be checked against information in Postman) + VCR.use_cassette("make_users") do + @test_workspace = Workspace.new + user = @test_workspace.users[0] + expect(user).must_be_kind_of User + end end - end + end + + describe "make_channels" do + it "parases channel API accurately into new Channel objects" do + VCR.use_cassette("make_channels") do + @test_workspace = Workspace.new + channel = @test_workspace.channels[0] + expect(channel).must_be_kind_of Channel + end + end + end end +describe "make summaries of users and channels for slack.rb to use" do + before do + VCR.use_cassette("make_channels") do + @test_workspace = Workspace.new + end + end + + it "all_user_names compiles names of all users" do + expected_number_of_users_postman = 3 + expected_first_user_postman = "slackbot" + expect(@test_workspace.all_user_names).must_be_kind_of Array + expect(@test_workspace.all_user_names.length).must_equal expected_number_of_users_postman + expect(@test_workspace.all_user_names[0]).must_equal expected_first_user_postman + end + + it "all_channel_names compiles names of all channels" do + expected_number_of_channels_postman = 3 + expected_first_channel_postman = "random" + expect(@test_workspace.all_channel_names).must_be_kind_of Array + expect(@test_workspace.all_channel_names.length).must_equal expected_number_of_users_postman + expect(@test_workspace.all_channel_names[0]).must_equal expected_first_user_postman + end + +end + + # describe "list " # # upon request, will use Slack API data to interact with / as a user or channel # end From 597486403fb020ac91c29983c03b5ab2d2409682 Mon Sep 17 00:00:00 2001 From: Vi Date: Thu, 12 Sep 2019 17:58:45 -0700 Subject: [PATCH 26/32] pseudocode for wave2 --- lib/slack.rb | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/lib/slack.rb b/lib/slack.rb index 6c9164e3..c6f7c928 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -24,6 +24,10 @@ def main case input when "1" puts workspace.all_user_names + # select user method + + + input = nil when "2" puts workspace.all_channel_names @@ -40,4 +44,27 @@ def main puts "Thank you for using the Ada Slack CLI" end + + # def select_a_user + # puts "Would you like to select a user?" + # until input== 3 + # input = gets.chomp + # if y + # puts "what user do you want to select" + # selected = gets.chomp + # (must be a user name) + # if invalid do a thing + # if valid + # # selected_user_method + # if desired "go back" + # end + + # def selected_user + # puts "What would you like to know? " + # # details + # # message + # if desired "go back" + # end + + main if __FILE__ == $PROGRAM_NAME \ No newline at end of file From ac2300c4b3c5b0958908d2a1e4b4a6ddf4edc8e3 Mon Sep 17 00:00:00 2001 From: Vi Date: Fri, 13 Sep 2019 12:58:42 -0700 Subject: [PATCH 27/32] working on details part of wave 2 --- lib/slack.rb | 124 ++++++++++++++++++++++++++++++++--------- lib/user.rb | 14 ++++- lib/workspace.rb | 8 +-- test/slack_test.rb | 6 +- test/workspace_test.rb | 5 +- 5 files changed, 114 insertions(+), 43 deletions(-) diff --git a/lib/slack.rb b/lib/slack.rb index c6f7c928..932e4ad0 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -1,5 +1,7 @@ #!/usr/bin/env ruby require_relative 'workspace' +require 'pry' + def main puts "Welcome to the Ada Slack CLI!" @@ -12,59 +14,127 @@ def main puts "There are #{workspace.channels.length} channel(s) in your workspace." + main_menu(workspace) + + puts "Thank you for using the Ada Slack CLI" +end + +def main_menu(workspace) + loop_options = ["1. List users", "2. List channels", "3. Quit"] puts "\nPlease select from one of the following options by choosing its corresponding number: " + loop_options.each do |option| puts "\t #{option}" end + input = gets.chomp.downcase until input == "quit" || input == "3" do case input when "1" + puts puts workspace.all_user_names - # select user method - - - + selected_user = make_a_selection(workspace) + if selected_user == nil + input = nil + end + + selected_info = display_selected(workspace, selected_user) + if selected_info == nil + input = nil + else puts selected_info + end + input = nil when "2" puts workspace.all_channel_names + selected_channel = make_a_selection(workspace) input = nil else - print "\nPlease select from one of the following options by choosing its corresponding number: " + print "\nPlease type the name of the user or channel you'd like to select: " loop_options.each do |option| puts "\t #{option}" end eval = nil input = gets.chomp.downcase end - end - puts "Thank you for using the Ada Slack CLI" + + end + end +def make_a_selection(workspace) + + puts "If you would like to select a user, enter their corresponding number. Type \'BACK\' to go back." + + eval = nil + until eval != nil + second_input = gets.chomp.downcase + + if second_input == "back" + return nil + + elsif workspace.all_user_names.include?(second_input) + puts "You selected the following user: #{second_input}." + selected = nil + binding.pry + i = 0 + + workspace.users.each do |possible_user| + if possible_user[i].name == second_input + puts "I evaluated a thing" + selected = possible_user + end + i += 1 + end + + puts "I got to the end" + return_statement = [selected, "user"] + return return_statement + + elsif workspace.all_channel_names.include?(second_input) + puts "You selected the following channel: #{second_input}." + selected = nil + binding.pry + workspace.channels.each do |possible_channel| + if possible_channel.name == second_input + selected = possible_channel + end + end + + + return_statement = ["#{second_input}", "channel"] + return return_statement + + else + eval = nil + puts "You did not enter a valid user. Please try again: " + second_input = gets.chomp.downcase + end + end +end - # def select_a_user - # puts "Would you like to select a user?" - # until input== 3 - # input = gets.chomp - # if y - # puts "what user do you want to select" - # selected = gets.chomp - # (must be a user name) - # if invalid do a thing - # if valid - # # selected_user_method - # if desired "go back" - # end - - # def selected_user - # puts "What would you like to know? " - # # details - # # message - # if desired "go back" - # end +def display_selected(workspace, selection) + puts "\n What would you like to know? + \n \t * Details + \n \t * Back" + third_input = gets.chomp.downcase + selection = selection[0] + + eval = nil + if third_input == "back" + return nil + elsif third_input == "details" + if selection[1] == "user" + # binding.pry + return workspace.selection.details + elsif selection[1] == "channel" + return workspace.channel.details + end + end +end main if __FILE__ == $PROGRAM_NAME \ No newline at end of file diff --git a/lib/user.rb b/lib/user.rb index 9eb59b6e..ef992114 100644 --- a/lib/user.rb +++ b/lib/user.rb @@ -21,6 +21,16 @@ def initialize(name:, slack_id:, real_name:, status_text:, status_emoji:) end @status_emoji = status_emoji end - - + + def details + return_statement = "\n + \n \t Name: #{@name} + \n \t Slack id: #{@slack_id} + \n \t Status text: #{@status_text} + \n \t Status emoji: #{@status_emoji}" + return return_statement + + end + + end \ No newline at end of file diff --git a/lib/workspace.rb b/lib/workspace.rb index 250e50c8..ff0f3204 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -53,9 +53,9 @@ def api_call_list_users end def make_users(response) - total_users = response["members"].length i = 0 + until i == total_users user_name = response["members"][i]["name"] user_slack_id = response["members"][i]["id"] @@ -64,13 +64,10 @@ def make_users(response) user_status_emoji = response["members"][i]["profile"]["status_emoji"] new_user = User.new(name: user_name, slack_id: user_slack_id, real_name: user_real_name, status_text: user_status_text, status_emoji: user_status_emoji) - @users << new_user i += 1 - end - end def api_call_list_channels @@ -81,12 +78,10 @@ def api_call_list_channels channel_response = HTTParty.get(url, query: query_parameters) make_channels(channel_response) return channel_response["ok"] == true - end def make_channels(response) - total_channels = response["channels"].length i = 0 until i == total_channels @@ -101,6 +96,5 @@ def make_channels(response) i += 1 end - end end \ No newline at end of file diff --git a/test/slack_test.rb b/test/slack_test.rb index ff27c7bb..7bbcd6eb 100644 --- a/test/slack_test.rb +++ b/test/slack_test.rb @@ -6,13 +6,13 @@ #No test for display :/ end - + it "main displays for the user the number of channels available" do #No test for display :/ end - + it "main displays for the user possible interactions a person can have" do #No test for display :/ end - + end \ No newline at end of file diff --git a/test/workspace_test.rb b/test/workspace_test.rb index 64ce6c28..0a72dca3 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -1,10 +1,7 @@ require_relative 'test_helper' describe 'workplace class' do - # before do - # @test_workspace = Workspace.new - # end - + describe "workplace attributes" do it "recognizes that it's an instance of Workspace" do VCR.use_cassette("initialize") do From a02978506c0613f47317ead8c5d077420b3af980 Mon Sep 17 00:00:00 2001 From: Vi Date: Fri, 13 Sep 2019 16:33:30 -0700 Subject: [PATCH 28/32] finished wave 2 and error free cli --- lib/channel.rb | 10 ++- lib/slack.rb | 151 +++++++++++++++++++++-------------------- lib/user.rb | 15 ++-- lib/workspace.rb | 16 ++++- test/channel_test.rb | 44 +----------- test/test_helper.rb | 3 +- test/workspace_test.rb | 18 ++--- 7 files changed, 122 insertions(+), 135 deletions(-) diff --git a/lib/channel.rb b/lib/channel.rb index 751d5240..923a44f9 100644 --- a/lib/channel.rb +++ b/lib/channel.rb @@ -2,8 +2,6 @@ class Channel attr_reader :name, :slack_id, :topic, :member_count - #If inheriting from parent class, do I need to include inherited keyword arguments? - def initialize(name:, slack_id:, topic:, member_count:) if name.class != String @@ -25,6 +23,14 @@ def initialize(name:, slack_id:, topic:, member_count:) raise ArgumentError.new, "Wrong format for member count!" end @member_count = member_count + end + + def details + return "\n + Name: #{@name} + Topic: #{@topic} + Slack id: #{@slack_id} + Member count: #{@member_count}" end end \ No newline at end of file diff --git a/lib/slack.rb b/lib/slack.rb index 932e4ad0..aa4880c2 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -2,7 +2,6 @@ require_relative 'workspace' require 'pry' - def main puts "Welcome to the Ada Slack CLI!" @@ -22,40 +21,63 @@ def main def main_menu(workspace) loop_options = ["1. List users", "2. List channels", "3. Quit"] - puts "\nPlease select from one of the following options by choosing its corresponding number: " - loop_options.each do |option| puts "\t #{option}" end input = gets.chomp.downcase - - until input == "quit" || input == "3" do + eval = nil + until eval == "exit" case input when "1" puts - puts workspace.all_user_names + puts "Here is a list of all users: " + all_users_details = [] + workspace.users.each do |user| + all_users_details << user.details + end + puts all_users_details selected_user = make_a_selection(workspace) if selected_user == nil + eval = nil + break + else + selected_info = display_selected(workspace, selected_user) + if selected_info == nil + break + else puts selected_info + end input = nil end - - selected_info = display_selected(workspace, selected_user) - if selected_info == nil - input = nil - else puts selected_info - end - - input = nil when "2" - puts workspace.all_channel_names + puts + puts "Here is a list of all channels: " + all_channel_details = [] + workspace.channels.each do |channel| + all_channel_details << channel.details + end + puts all_channel_details selected_channel = make_a_selection(workspace) - input = nil + if selected_channel == nil + eval = nil + break + else + selected_info = display_selected(workspace, selected_channel) + if selected_info == nil + break + else puts selected_info + end + input = nil + end + when "3" + eval = "exit" + when "quit" + eval = "exit" else - print "\nPlease type the name of the user or channel you'd like to select: " + puts "\nPlease select from one of the following options by choosing its corresponding number: " loop_options.each do |option| - puts "\t #{option}" + puts "\t #{option}" end eval = nil input = gets.chomp.downcase @@ -66,72 +88,57 @@ def main_menu(workspace) end def make_a_selection(workspace) + print "\n If you would like to select a user or channel, please enter their corresponding name or Slack ID. You may type \'QUIT\' to quit.: " + second_input = gets.chomp.downcase - puts "If you would like to select a user, enter their corresponding number. Type \'BACK\' to go back." + if second_input == "quit" + return nil + end - eval = nil - until eval != nil - second_input = gets.chomp.downcase - - if second_input == "back" - return nil - - elsif workspace.all_user_names.include?(second_input) - puts "You selected the following user: #{second_input}." - selected = nil - binding.pry - i = 0 - - workspace.users.each do |possible_user| - if possible_user[i].name == second_input - puts "I evaluated a thing" - selected = possible_user - end - i += 1 + selected = nil + + if workspace.all_user_names.include?(second_input) || workspace.all_user_slack_ids.include?(second_input) + puts "You selected the following user: #{second_input}.\n " + workspace.users.each do |possible_user| + if possible_user.name == second_input || possible_user.slack_id == second_input + selected = possible_user end - - puts "I got to the end" - return_statement = [selected, "user"] - return return_statement - - elsif workspace.all_channel_names.include?(second_input) - puts "You selected the following channel: #{second_input}." - selected = nil - binding.pry - workspace.channels.each do |possible_channel| - if possible_channel.name == second_input - selected = possible_channel - end + end + return_statement = [selected, "user"] + return return_statement + + elsif workspace.all_channel_names.include?(second_input) || workspace.all_channel_slack_ids.include?(second_input) + puts "You selected the following channel: #{second_input}. \n" + workspace.channels.each do |possible_channel| + if possible_channel.name == second_input || possible_channel.slack_id == second_input + selected = possible_channel end - - - return_statement = ["#{second_input}", "channel"] - return return_statement - - else - eval = nil - puts "You did not enter a valid user. Please try again: " - second_input = gets.chomp.downcase end - end -end + return_statement = [selected, "channel"] + return return_statement + else + puts "You did not enter a valid user. We're going to quit." + return nil + end +end -def display_selected(workspace, selection) +def display_selected(workspace, selection) + puts "\n What would you like to know? \n \t * Details - \n \t * Back" + \n \t * Quit" third_input = gets.chomp.downcase - selection = selection[0] + if third_input == "quit" + return nil + end + + selection_text = selection[0] - eval = nil - if third_input == "back" - return nil - elsif third_input == "details" + if third_input == "details" if selection[1] == "user" - # binding.pry - return workspace.selection.details + return selection_text.details elsif selection[1] == "channel" - return workspace.channel.details + return selection_text.details end end end diff --git a/lib/user.rb b/lib/user.rb index ef992114..1c9da451 100644 --- a/lib/user.rb +++ b/lib/user.rb @@ -1,6 +1,6 @@ class User - attr_reader :name, :slack_id, :real_name, :status_text, :status_emoji + attr_reader :name, :slack_id, :real_name, :status_text, :status_emoji def initialize(name:, slack_id:, real_name:, status_text:, status_emoji:) @name = name @@ -20,15 +20,16 @@ def initialize(name:, slack_id:, real_name:, status_text:, status_emoji:) raise ArgumentError.new "Wrong format for emoji input!" end @status_emoji = status_emoji + + # @details = details end def details - return_statement = "\n - \n \t Name: #{@name} - \n \t Slack id: #{@slack_id} - \n \t Status text: #{@status_text} - \n \t Status emoji: #{@status_emoji}" - return return_statement + return "Name: #{@name} + Slack id: #{@slack_id} + Status text: #{@status_text} + Status emoji: #{@status_emoji} + Real name: #{@real_name}" end diff --git a/lib/workspace.rb b/lib/workspace.rb index ff0f3204..f90797a9 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -19,7 +19,6 @@ def initialize api_call_list_channels end - def all_user_names all_user_names = [] @@ -38,6 +37,21 @@ def all_channel_names return all_channel_names end + def all_user_slack_ids + all_user_slack_ids = [] + users.each do |user| + all_user_slack_ids << user.slack_id + end + return all_user_slack_ids + end + + def all_channel_slack_ids + all_channel_slack_ids = [] + channels.each do |channel| + all_channel_slack_ids << channel.slack_id + end + end + def api_call_list_users #This method takes in the entire listuser api url = "https://slack.com/api/users.list" diff --git a/test/channel_test.rb b/test/channel_test.rb index 9dde005e..3ee616bb 100644 --- a/test/channel_test.rb +++ b/test/channel_test.rb @@ -52,46 +52,4 @@ expect(@test_channel.member_count).must_equal @test_member_count end -end -# describe "fleshed-out methods of being able to provide a detailed summary" do -# end - -# describe "fleshed-out methods of being able to make a list of instances of itself" do -# end - -# describe "instances of user can initiate from API and parse the data" do - - -# #Any tests involving a User should use the username SlackBot - -# before do -# end - -# it "is a test, maybe?" do - -# end - -# # describe "" - -# describe "user attributes and behaviors" do - -# before do -# end - -# it "is a test, maybe?" do -# VCR.use_cassette("slack_info") do -# end -# end -# end - -# describe "user attributes and behaviors" do - -# before do -# end - -# it "is a test, maybe?" do -# VCR.use_cassette("slack_info") do -# end -# end -# end -# end +end \ No newline at end of file diff --git a/test/test_helper.rb b/test/test_helper.rb index 6ea775ad..72b05dab 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -1,6 +1,7 @@ require 'simplecov' SimpleCov.start do add_filter 'test/' + add_filter 'lib/slack' end require 'minitest' @@ -21,7 +22,7 @@ config.default_cassette_options = { record: :new_episodes, # record new data when we don't have it } - + config.filter_sensitive_data "" do ENV["SLACK_TOKEN"] end diff --git a/test/workspace_test.rb b/test/workspace_test.rb index 0a72dca3..50b4983e 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -1,7 +1,7 @@ require_relative 'test_helper' describe 'workplace class' do - + describe "workplace attributes" do it "recognizes that it's an instance of Workspace" do VCR.use_cassette("initialize") do @@ -52,7 +52,7 @@ @test_workspace = Workspace.new end end - + it "all_user_names compiles names of all users" do expected_number_of_users_postman = 3 expected_first_user_postman = "slackbot" @@ -60,18 +60,18 @@ expect(@test_workspace.all_user_names.length).must_equal expected_number_of_users_postman expect(@test_workspace.all_user_names[0]).must_equal expected_first_user_postman end - + it "all_channel_names compiles names of all channels" do expected_number_of_channels_postman = 3 expected_first_channel_postman = "random" expect(@test_workspace.all_channel_names).must_be_kind_of Array - expect(@test_workspace.all_channel_names.length).must_equal expected_number_of_users_postman - expect(@test_workspace.all_channel_names[0]).must_equal expected_first_user_postman + expect(@test_workspace.all_channel_names.length).must_equal expected_number_of_channels_postman + expect(@test_workspace.all_channel_names[0]).must_equal expected_first_channel_postman end + -end +# test all_user_names +# test all_channel_names -# describe "list " -# # upon request, will use Slack API data to interact with / as a user or channel -# end +end From bc9705005758f7ef783e0914b203e9aed60c0df7 Mon Sep 17 00:00:00 2001 From: Vi Date: Fri, 13 Sep 2019 17:25:53 -0700 Subject: [PATCH 29/32] dont with wave 3 wahoo --- lib/slack.rb | 25 +++++++++++++++++++++---- lib/workspace.rb | 17 +++++++++++++++++ 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/lib/slack.rb b/lib/slack.rb index aa4880c2..2e429692 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -88,7 +88,7 @@ def main_menu(workspace) end def make_a_selection(workspace) - print "\n If you would like to select a user or channel, please enter their corresponding name or Slack ID. You may type \'QUIT\' to quit.: " + print "\n You will be able to see details or send a message soon! Please select a user or channel by entering their corresponding name or Slack ID. If you'd like to exit, you may type \'QUIT\' to quit the program.: " second_input = gets.chomp.downcase if second_input == "quit" @@ -123,10 +123,11 @@ def make_a_selection(workspace) end def display_selected(workspace, selection) - puts "\n What would you like to know? - \n \t * Details - \n \t * Quit" + \t * Details + \t * Send message + \t * Quit" + third_input = gets.chomp.downcase if third_input == "quit" return nil @@ -140,8 +141,24 @@ def display_selected(workspace, selection) elsif selection[1] == "channel" return selection_text.details end + elsif third_input == "send message" + success_of_messaging = sending_message(workspace, selection) + if success_of_messaging == true + puts "You successfully sent your message. Great" + else + puts "Your message did not send. Sorry." + end end end +def sending_message(workspace, selection) + puts "What message do you want to send to #{selection[0].name}? \n Type it here: " + message = gets.chomp + + success_of_sending = workspace.api_message_send(message, selection[0]) + return success_of_sending + +end + main if __FILE__ == $PROGRAM_NAME \ No newline at end of file diff --git a/lib/workspace.rb b/lib/workspace.rb index f90797a9..18e1367b 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -66,6 +66,22 @@ def api_call_list_users return user_response["ok"] == true end + def api_message_send(message, recipient) + url = "https://api.slack.com/api/chat.postMessage" + api_key = ENV['SLACK_TOKEN'] + text = message + + being_messaged = recipient.slack_id + query_parameters = {"token" => api_key, + "channel" => being_messaged, + "text" => text + } + + response = HTTParty.post(url, query: query_parameters) + + return response["ok"] == true + end + def make_users(response) total_users = response["members"].length i = 0 @@ -111,4 +127,5 @@ def make_channels(response) i += 1 end end + end \ No newline at end of file From dd800da0eec929efed0f4677bb2bca4c888f1e97 Mon Sep 17 00:00:00 2001 From: C Gutierrez Date: Sat, 14 Sep 2019 16:15:21 -0700 Subject: [PATCH 30/32] Refactor after adding tests to cover all functionality --- .DS_Store | Bin 6148 -> 6148 bytes lib/recipient.rb | 2 +- lib/user.rb | 47 ++++++++++---- lib/workspace.rb | 138 ++++++++++++++++++++--------------------- test/channel_test.rb | 3 +- test/recipient_test.rb | 4 +- test/user_test.rb | 90 ++++++++++++--------------- test/workspace_test.rb | 90 +++++++++++++++++---------- 8 files changed, 206 insertions(+), 168 deletions(-) diff --git a/.DS_Store b/.DS_Store index a2eb533abf551d042629249e6fe5fb378b3b5ee0..f09abbfe02723e17ec0e020dd8531e9270ed4365 100644 GIT binary patch delta 136 zcmZoMXfc=|&e%4wP>hv>fq{WzVxfpE6OaJ{AexbZL4bjwh#`?7oguX>xF~O8p*mOr z2SYMLK0_HpDzaoweqQ=S4f&1f4(yW+L|8U+bMSC5wrwo@&ODi4L{SuEpaKvl05Q;D Oh66y%u-Q>$KQjOe3>wh@ delta 76 zcmZoMXfc=|&Zs)EP api_key} + channel_response = HTTParty.get(url, query: query_parameters) + make_channels(channel_response) + return channel_response["ok"] == true end def api_call_list_users @@ -66,21 +43,22 @@ def api_call_list_users return user_response["ok"] == true end - def api_message_send(message, recipient) - url = "https://api.slack.com/api/chat.postMessage" - api_key = ENV['SLACK_TOKEN'] - text = message - - being_messaged = recipient.slack_id - query_parameters = {"token" => api_key, - "channel" => being_messaged, - "text" => text - } - - response = HTTParty.post(url, query: query_parameters) - - return response["ok"] == true - end + def make_channels(response) + total_channels = response["channels"].length + i = 0 + until i == total_channels + channel_name = response["channels"][i]["name"] + channel_slack_id = response["channels"][i]["id"] + channel_topic = response["channels"][i]["topic"]["value"] + channel_member_count = response["channels"][i]["num_members"] + + new_channel = Channel.new(name: channel_name, slack_id: channel_slack_id, topic: channel_topic, member_count: channel_member_count) + + @channels << new_channel + + i += 1 + end + end def make_users(response) total_users = response["members"].length @@ -100,32 +78,54 @@ def make_users(response) end end - def api_call_list_channels - #This method takes in the entire listuser api - url = "https://slack.com/api/conversations.list" - api_key = ENV['SLACK_TOKEN'] - query_parameters = {"token" => api_key} - channel_response = HTTParty.get(url, query: query_parameters) - make_channels(channel_response) - return channel_response["ok"] == true - end + def all_channel_names + all_channel_names = [] + + channels.each do |channel| + all_channel_names << channel.name + end + return all_channel_names + end - def make_channels(response) - total_channels = response["channels"].length - i = 0 - until i == total_channels - channel_name = response["channels"][i]["name"] - channel_slack_id = response["channels"][i]["id"] - channel_topic = response["channels"][i]["topic"]["value"] - channel_member_count = response["channels"][i]["num_members"] - - new_channel = Channel.new(name: channel_name, slack_id: channel_slack_id, topic: channel_topic, member_count: channel_member_count) - - @channels << new_channel - - i += 1 + def all_user_names + all_user_names = [] + + users.each do |user| + all_user_names << user.name + end + return all_user_names + end + + def all_channel_slack_ids + all_channel_slack_ids = [] + channels.each do |channel| + all_channel_slack_ids << channel.slack_id + end + end + + def all_user_slack_ids + all_user_slack_ids = [] + users.each do |user| + all_user_slack_ids << user.slack_id end + return all_user_slack_ids end + def api_message_send(message, recipient) + url = "https://api.slack.com/api/chat.postMessage" + api_key = ENV['SLACK_TOKEN'] + text = message + + being_messaged = recipient.slack_id + query_parameters = {"token" => api_key, + "channel" => being_messaged, + "text" => text + } + + response = HTTParty.post(url, query: query_parameters) + + return response["ok"] == true + end + end \ No newline at end of file diff --git a/test/channel_test.rb b/test/channel_test.rb index 3ee616bb..c47c1652 100644 --- a/test/channel_test.rb +++ b/test/channel_test.rb @@ -1,7 +1,6 @@ require_relative 'test_helper' describe "instances of channel initiate " do - #throws all sorts of errors for missing or mis-classed information before do @test_name = "Awesome" @test_slack_id = "luckynumber13" @@ -12,7 +11,7 @@ it "verifies that attempting to initialize an instance of Channel without appropriate data throws an ArgumentError" do integer_name = 00132 expect{ - test_channel = Channel.new(name: integer_name, slack_id: @test_slack_id, topic: @test_topic, member_count: @test_member_count) + @test_channel = Channel.new(name: integer_name, slack_id: @test_slack_id, topic: @test_topic, member_count: @test_member_count) }.must_raise ArgumentError integer_slack_id = 13 diff --git a/test/recipient_test.rb b/test/recipient_test.rb index 8663f56b..72a9ecb9 100644 --- a/test/recipient_test.rb +++ b/test/recipient_test.rb @@ -25,8 +25,8 @@ describe "recipient blocks initialization if incorrect format" do it "allows initialization with name and id as instances of string to match API" do VCR.use_cassette("slack_info") do - expect{test_recipient = Recipient.new(name: "0001", id: 15.999)}.must_raise ArgumentError - expect{test_recipient = Recipient.new(name: 0001, id: "15.999")}.must_raise ArgumentError + expect{@test_recipient = Recipient.new(name: "0001", id: 15.999)}.must_raise ArgumentError + expect{@test_recipient = Recipient.new(name: 0001, id: "15.999")}.must_raise ArgumentError end end diff --git a/test/user_test.rb b/test/user_test.rb index c7492bfd..5f20b68e 100644 --- a/test/user_test.rb +++ b/test/user_test.rb @@ -1,8 +1,8 @@ require_relative 'test_helper' describe "instances of user initiate " do - #throws all sorts of errors for missing or mis-classed information - before do + + before do @test_name = "Awesome" @test_id = "luckynumber13" @test_real_name = "Hella Awesome" @@ -12,45 +12,47 @@ it "verifies that attempting to initialize an instance of User without appropriate data throws an ArgumentError" do integer_test_name = 00132 - expect{ - @test_user = User.new(name: @test_name, slack_id: @test_id, real_name: @test_real_name, status_test: @test_status_text, status_emoji: @test_emoji) - }.must_raise ArgumentError + expect { @test_user = User.new(name: integer_test_name, slack_id: @test_id, real_name: @test_real_name, status_text: @test_status_text, status_emoji: @test_emoji) }.must_raise ArgumentError integer_slack_id = 13 expect{ - @test_user = User.new(name: @test_name, slack_id: integer_slack_id, real_name: @test_real_name, status_test: @test_status_text, status_emoji: @test_emoji) + @test_user = User.new(name: @test_name, slack_id: integer_slack_id, real_name: @test_real_name, status_text: @test_status_text, status_emoji: @test_emoji) }.must_raise ArgumentError array_real_name = ["awesome", "pawsome"] expect{ - @test_user = User.new(name: @test_name, slack_id: @test_id, real_name: array_real_name, status_test: @test_status_text, status_emoji: @test_emoji) + @test_user = User.new(name: @test_name, slack_id: @test_id, real_name: array_real_name, status_text: @test_status_text, status_emoji: @test_emoji) }.must_raise ArgumentError integer_status_text = 99443 expect{ - @test_user = User.new(name: @test_name, slack_id: @test_id, real_name: @test_real_name, status_test: integer_status_text, status_emoji: @test_emoji) + @test_user = User.new(name: @test_name, slack_id: @test_id, real_name: @test_real_name, status_text: integer_status_text, status_emoji: @test_emoji) }.must_raise ArgumentError stringy_emoji = "sunglasses" expect{ - @test_user = User.new(name: @test_name, slack_id: @test_id, real_name: @test_real_name, status_test: @test_status_text, status_emoji: stringy_emoji) - }.must_raise ArgumentError + @test_user = User.new(name: @test_name, slack_id: @test_id, real_name: @test_real_name, status_text: @test_status_text, status_emoji: stringy_emoji) + }.must_raise ArgumentError + + stringy_emoji = 32978234 + expect{ + @test_user = User.new(name: @test_name, slack_id: @test_id, real_name: @test_real_name, status_text: @test_status_text, status_emoji: stringy_emoji) + }.must_raise ArgumentError end end -describe "instances of user initiate properly using manually passed in data" do - +describe "instances of user initiate " do before do @test_name = "Awesome" @test_id = "luckynumber13" @test_real_name = "Hella Awesome" @test_status_text = "Bein Awesome" @test_emoji = ":sunglasses:" - - @test_user = User.new(name: @test_name, slack_id: @test_id, real_name: @test_real_name, status_text: @test_status_text, status_emoji: @test_emoji) end - it "verify initialization of User" do + it "verify initialization of User with accurate information" do + + @test_user = User.new(name: @test_name, slack_id: @test_id, real_name: @test_real_name, status_text: @test_status_text, status_emoji: @test_emoji) expect(@test_user).must_be_kind_of User expect(@test_user.name).must_equal @test_name @@ -61,44 +63,34 @@ end +end + +describe "fleshed-out methods of being able to provide a detailed summary" do - describe "fleshed-out methods of being able to provide a detailed summary" do - end - - describe "fleshed-out methods of being able to make a list of instances of itself" do - end - - describe "instances of user can initiate from API and parse the data" do - - - #Any tests involving a User should use the username SlackBot - - before do - end - - it "is a test, maybe?" + before do + @test_name = "Awesome" + @test_id = "luckynumber13" + @test_real_name = "Hella Awesome" + @test_status_text = "Bein Awesome" + @test_emoji = ":sunglasses:" + @test_user = User.new(name: @test_name, slack_id: @test_id, real_name: @test_real_name, status_text: @test_status_text, status_emoji: @test_emoji) end - - # describe "" - - describe "user attributes and behaviors" do + it "verifies the type of return provided by details" do - before do - end + detail_statement = @test_user.details - it "is a test, maybe?" - VCR.use_cassette("slack_info") do - end + expect(detail_statement).must_be_kind_of String + expect(detail_statement).must_include(@test_name) + expect(detail_statement).must_include(@test_id) + expect(detail_statement).must_include(@test_real_name) + expect(detail_statement).must_include(@test_status_text) + expect(detail_statement).must_include(@test_emoji) end - describe "user attributes and behaviors" do - - before do - end - - it "is a test, maybe?" - VCR.use_cassette("slack_info") do - end - end -end \ No newline at end of file +end + + + + + diff --git a/test/workspace_test.rb b/test/workspace_test.rb index 50b4983e..6953d262 100644 --- a/test/workspace_test.rb +++ b/test/workspace_test.rb @@ -13,39 +13,38 @@ end end end - - describe "workplace behavior in talking to Slack API" do - it "will call Slack API succesfully" do - VCR.use_cassette("api_call_list_users") do - @test_workspace = Workspace.new - expect(@test_workspace.api_call_list_users).must_equal true - end +end + +describe "workplace behavior in talking to Slack API" do + it "will call Slack API succesfully" do + VCR.use_cassette("api_call_list_users") do + @test_workspace = Workspace.new + expect(@test_workspace.api_call_list_users).must_equal true end - end - - #expecting to have to parse the data from Slack API into something that's recognizable wherein "name" has a predictable value (will be checked against information in Postman) - describe "make_users" do - #This checks our make_users method because users is an array of user objects populated by the make_users method - it "parses user API accurately into new User objects" do - VCR.use_cassette("make_users") do - @test_workspace = Workspace.new - user = @test_workspace.users[0] - expect(user).must_be_kind_of User - end + end +end + +describe "make_users" do + it "parses user API accurately into new User objects" do + VCR.use_cassette("make_users") do + @test_workspace = Workspace.new + user = @test_workspace.users[0] + expect(user).must_be_kind_of User end - end - - describe "make_channels" do - it "parases channel API accurately into new Channel objects" do - VCR.use_cassette("make_channels") do - @test_workspace = Workspace.new - channel = @test_workspace.channels[0] - expect(channel).must_be_kind_of Channel - end + end +end + +describe "make_channels" do + it "parases channel API accurately into new Channel objects" do + VCR.use_cassette("make_channels") do + @test_workspace = Workspace.new + channel = @test_workspace.channels[0] + expect(channel).must_be_kind_of Channel end end end + describe "make summaries of users and channels for slack.rb to use" do before do VCR.use_cassette("make_channels") do @@ -64,14 +63,41 @@ it "all_channel_names compiles names of all channels" do expected_number_of_channels_postman = 3 expected_first_channel_postman = "random" + expect(@test_workspace.all_channel_names).must_be_kind_of Array expect(@test_workspace.all_channel_names.length).must_equal expected_number_of_channels_postman expect(@test_workspace.all_channel_names[0]).must_equal expected_first_channel_postman end - -# test all_user_names - -# test all_channel_names - + it "all_user_names compiles slack_ids of all users" do + expected_number_of_users_postman = 3 + expected_first_user_id_postman = "USLACKBOT" + + expect(@test_workspace.all_user_slack_ids).must_be_kind_of Array + expect(@test_workspace.all_user_slack_ids.length).must_equal expected_number_of_users_postman + expect(@test_workspace.all_user_slack_ids[0]).must_equal expected_first_user_id_postman + end + + it "all_user_names compiles slack_ids of all channels" do + expected_number_of_channels_postman = 3 + expected_first_channel_id_postman = "CN69KP124" + + expect(@test_workspace.all_channel_slack_ids).must_be_kind_of Array + expect(@test_workspace.all_channel_slack_ids.length).must_equal expected_number_of_channels_postman + expect(@test_workspace.all_channel_slack_ids[0].slack_id).must_equal expected_first_channel_id_postman + end + end + +describe "workplace successfully calls Slack API to send a message to Slack API" do + + it "verifies that a message was successfully sent to Slack API" do + VCR.use_cassette("api_call_list_users") do + @test_workspace = Workspace.new + test_recipient_of_message = @test_workspace.users[2] + + expect(@test_workspace.api_message_send("I am a test", test_recipient_of_message)).must_equal true + + end + end +end \ No newline at end of file From 83236b4087125c013b9a83342333870fc80c6d2f Mon Sep 17 00:00:00 2001 From: C Gutierrez Date: Sat, 14 Sep 2019 16:42:07 -0700 Subject: [PATCH 31/32] refactor to use inheritance of Recipient class for User and Channel --- lib/channel.rb | 17 +++++------------ lib/recipient.rb | 5 +---- lib/user.rb | 22 ++++++---------------- test/recipient_test.rb | 24 ------------------------ 4 files changed, 12 insertions(+), 56 deletions(-) diff --git a/lib/channel.rb b/lib/channel.rb index 923a44f9..7644c8ce 100644 --- a/lib/channel.rb +++ b/lib/channel.rb @@ -1,18 +1,11 @@ -class Channel +require_relative 'recipient' + +class Channel < Recipient - attr_reader :name, :slack_id, :topic, :member_count + attr_reader :topic, :member_count def initialize(name:, slack_id:, topic:, member_count:) - - if name.class != String - raise ArgumentError.new, "wrong format for initiating name" - end - @name = name - - if slack_id.class != String - raise ArgumentError.new, "wrong format for initiating id" - end - @slack_id = slack_id + super(name: name, slack_id: slack_id) if topic.class != String raise ArgumentError.new, "Wrong format for topic!" diff --git a/lib/recipient.rb b/lib/recipient.rb index 7db031c1..10ba95a2 100644 --- a/lib/recipient.rb +++ b/lib/recipient.rb @@ -16,12 +16,9 @@ def initialize(name:, slack_id:) end - + def details raise NotImplementedError.new "not implemented in recipient class" end - def self.list - raise NotImplementedError.new "not implemented in recipient class" - end end diff --git a/lib/user.rb b/lib/user.rb index e6c374ac..ba49636c 100644 --- a/lib/user.rb +++ b/lib/user.rb @@ -1,22 +1,12 @@ -class User +require_relative 'recipient' + +class User < Recipient - attr_reader :name, :slack_id, :real_name, :status_text, :status_emoji + attr_reader :real_name, :status_text, :status_emoji def initialize(name:, slack_id:, real_name:, status_text:, status_emoji:) - - if name.class != String - raise ArgumentError.new, "Wrong format for real name initialization" - else - @name = name - end - - if slack_id.class != String - raise ArgumentError.new, "Wrong format for real name initialization" - else - @slack_id = slack_id - end - - + super(name: name, slack_id: slack_id) + if real_name.class != String raise ArgumentError.new, "Wrong format for real name initialization" else diff --git a/test/recipient_test.rb b/test/recipient_test.rb index 72a9ecb9..4de0e51d 100644 --- a/test/recipient_test.rb +++ b/test/recipient_test.rb @@ -38,27 +38,3 @@ expect{detail_free_recipient.details}.must_raise NotImplementedError end end - -describe "fleshed-out methods of being able to make a list of instances of itself" do - it "does not implement a self.list method" do - expect{Recipient.list}.must_raise NotImplementedError - end -end - - - -xdescribe "recipient implemented methods" do - it "responds to needing to send messages" do - #add guts later, for now, acknowledge request - end - - it "has a class method to fetch its own URL" do - # Clara thinks this might be send messages? Who knows? ? - end - - it "has a class method to fetch its own params" do - # Clara thinks this might be send messages? Who knows? ? - end - - -end From 66578af3e6a5c08b452301d51896dac7728b24d1 Mon Sep 17 00:00:00 2001 From: C Gutierrez Date: Sat, 14 Sep 2019 17:21:41 -0700 Subject: [PATCH 32/32] Added cassettes to submission --- .gitignore | 4 +- test/cassettes/api_call_list_users.yml | 300 +++++++++++++++++++++++++ test/cassettes/initialize.yml | 154 +++++++++++++ test/cassettes/make_channels.yml | 154 +++++++++++++ test/cassettes/make_users.yml | 154 +++++++++++++ test/cassettes/slack_info.yml | 154 +++++++++++++ 6 files changed, 918 insertions(+), 2 deletions(-) create mode 100644 test/cassettes/api_call_list_users.yml create mode 100644 test/cassettes/initialize.yml create mode 100644 test/cassettes/make_channels.yml create mode 100644 test/cassettes/make_users.yml create mode 100644 test/cassettes/slack_info.yml diff --git a/.gitignore b/.gitignore index ae9badff..d4edbe78 100644 --- a/.gitignore +++ b/.gitignore @@ -53,8 +53,8 @@ build-iPhoneSimulator/ .env # Ignore cassette files -/specs/cassettes/ -/test/cassettes/ +# /specs/cassettes/ +# /test/cassettes/ # Ignore my set-up test /lib/set_up/ \ No newline at end of file diff --git a/test/cassettes/api_call_list_users.yml b/test/cassettes/api_call_list_users.yml new file mode 100644 index 00000000..3112967e --- /dev/null +++ b/test/cassettes/api_call_list_users.yml @@ -0,0 +1,300 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/users.list?token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '923' + Connection: + - keep-alive + Date: + - Sat, 14 Sep 2019 21:33:29 GMT + Server: + - Apache + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - aee34873-9b5f-4ad2-802d-e9b98f863efd + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write:bot + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - users:read + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-abbx + X-Cache: + - Miss from cloudfront + Via: + - 1.1 4c7c693b007dfce603c83f138e31bccb.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - ja-pnKc8Dyy_kBO1cKTrsXTj33nM8H7a1m2lfDh_fdyp7nNaXKTiPQ== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"TN69KNQ5N","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":null,"tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Slackbot","real_name_normalized":"Slackbot","display_name":"Slackbot","display_name_normalized":"Slackbot","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"sv41d8cd98f0","always_active":true,"first_name":"slackbot","last_name":"","image_24":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png","image_32":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png","image_192":"https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png","image_512":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png","status_text_canonical":"","team":"TN69KNQ5N"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":0},{"id":"UN69SPE21","team_id":"TN69KNQ5N","name":"vanessareigosa","deleted":false,"color":"9f69e7","real_name":"v","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"v","real_name_normalized":"v","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gd0d0c84e105","first_name":"v","last_name":"","image_24":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-512.png","status_text_canonical":"","team":"TN69KNQ5N"},"is_admin":true,"is_owner":true,"is_primary_owner":true,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568445059},{"id":"UN85M758X","team_id":"TN69KNQ5N","name":"gutierrez.clara.es","deleted":false,"color":"4bbe2e","real_name":"Clara","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Clara","real_name_normalized":"Clara","display_name":"Clara","display_name_normalized":"Clara","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g096e4481348","image_24":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-512.png","status_text_canonical":"","team":"TN69KNQ5N"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568072026,"has_2fa":false}],"cache_ts":1568496809,"response_metadata":{"next_cursor":""}}' + http_version: + recorded_at: Sat, 14 Sep 2019 21:33:27 GMT +- request: + method: get + uri: https://slack.com/api/conversations.list?token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '598' + Connection: + - keep-alive + Date: + - Sat, 14 Sep 2019 21:33:29 GMT + Server: + - Apache + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - b107fce4-8465-475f-8adf-623f68c8acf5 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write:bot + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-8emn + X-Cache: + - Miss from cloudfront + Via: + - 1.1 814362d7589b223cc8927cc821d97136.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - oVybmbrL3xsHPwh-mwsbLmM_5rusfD6eTYMq4S5KAgX9BmIfiTsBUg== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channels":[{"id":"CN69KP124","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1568071958,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"UN69SPE21","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TN69KNQ5N"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"Non-work + banter and water cooler conversation","creator":"UN69SPE21","last_set":1568071958},"purpose":{"value":"A + place for non-work-related flimflam, faffing, hodge-podge or jibber-jabber + you''d prefer to keep out of more focused work-related channels.","creator":"UN69SPE21","last_set":1568071958},"previous_names":[],"num_members":2},{"id":"CN8FWJQJJ","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1568071958,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"UN69SPE21","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TN69KNQ5N"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"Company-wide + announcements and work-based matters","creator":"UN69SPE21","last_set":1568071958},"purpose":{"value":"This + channel is for workspace-wide communication and announcements. All members + are in this channel.","creator":"UN69SPE21","last_set":1568071958},"previous_names":[],"num_members":2},{"id":"CN8FWJZ6J","name":"api-project","is_channel":true,"is_group":false,"is_im":false,"created":1568071958,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"api-project","is_shared":false,"parent_conversation":null,"creator":"UN69SPE21","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TN69KNQ5N"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"","creator":"","last_set":0},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' + http_version: + recorded_at: Sat, 14 Sep 2019 21:33:27 GMT +- request: + method: get + uri: https://slack.com/api/users.list?token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '923' + Connection: + - keep-alive + Date: + - Sat, 14 Sep 2019 21:33:29 GMT + Server: + - Apache + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - 620f3967-aea9-4ca6-adc9-bfb135ad57ed + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write:bot + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - users:read + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-5f34 + X-Cache: + - Miss from cloudfront + Via: + - 1.1 d6a002c70d55f415107618b0750d493d.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - S7jgFqmg7dwMvX4HMkc9MIAVhjm7Wij8w3cIzcyA13Pl5Us7tgJ4KA== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"TN69KNQ5N","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":null,"tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Slackbot","real_name_normalized":"Slackbot","display_name":"Slackbot","display_name_normalized":"Slackbot","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"sv41d8cd98f0","always_active":true,"first_name":"slackbot","last_name":"","image_24":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png","image_32":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png","image_192":"https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png","image_512":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png","status_text_canonical":"","team":"TN69KNQ5N"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":0},{"id":"UN69SPE21","team_id":"TN69KNQ5N","name":"vanessareigosa","deleted":false,"color":"9f69e7","real_name":"v","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"v","real_name_normalized":"v","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gd0d0c84e105","first_name":"v","last_name":"","image_24":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-512.png","status_text_canonical":"","team":"TN69KNQ5N"},"is_admin":true,"is_owner":true,"is_primary_owner":true,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568445059},{"id":"UN85M758X","team_id":"TN69KNQ5N","name":"gutierrez.clara.es","deleted":false,"color":"4bbe2e","real_name":"Clara","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Clara","real_name_normalized":"Clara","display_name":"Clara","display_name_normalized":"Clara","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g096e4481348","image_24":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-512.png","status_text_canonical":"","team":"TN69KNQ5N"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568072026,"has_2fa":false}],"cache_ts":1568496809,"response_metadata":{"next_cursor":""}}' + http_version: + recorded_at: Sat, 14 Sep 2019 21:33:27 GMT +- request: + method: post + uri: https://api.slack.com/api/chat.postMessage?channel=UN85M758X&text=I%20am%20a%20test&token= + body: + encoding: UTF-8 + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '169' + Connection: + - keep-alive + Date: + - Sat, 14 Sep 2019 23:14:08 GMT + Server: + - Apache + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - 3c59825f-bd56-4574-ac5c-0a52030ed881 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write:bot + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - chat:write:bot + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-d0g2 + X-Cache: + - Miss from cloudfront + Via: + - 1.1 3cd7af07832481c336aa1c93c9b4a6fe.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - cWHfS_FDPJsPegGAphHGogboiNOhMgG4mzOmF6TCwh5-21zdizzKLA== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channel":"DMZT2PKUH","ts":"1568502848.000100","message":{"type":"message","subtype":"bot_message","text":"I + am a test","ts":"1568502848.000100","username":"Slack API Project","bot_id":"BN47E0UAD"}}' + http_version: + recorded_at: Sat, 14 Sep 2019 23:14:07 GMT +recorded_with: VCR 5.0.0 diff --git a/test/cassettes/initialize.yml b/test/cassettes/initialize.yml new file mode 100644 index 00000000..bd9f4454 --- /dev/null +++ b/test/cassettes/initialize.yml @@ -0,0 +1,154 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/users.list?token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '923' + Connection: + - keep-alive + Date: + - Sat, 14 Sep 2019 21:33:30 GMT + Server: + - Apache + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - 6d23b16b-d3af-4d6f-82d3-e35e06987bbe + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write:bot + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - users:read + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-idv8 + X-Cache: + - Miss from cloudfront + Via: + - 1.1 7e87179efaa9e3c316bd3d3a74cfded8.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - oqe8_azlHcc49w53xPjq0ejI5uZW7OxpakXDEVZKONY4KcHsgSgIYw== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"TN69KNQ5N","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":null,"tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Slackbot","real_name_normalized":"Slackbot","display_name":"Slackbot","display_name_normalized":"Slackbot","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"sv41d8cd98f0","always_active":true,"first_name":"slackbot","last_name":"","image_24":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png","image_32":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png","image_192":"https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png","image_512":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png","status_text_canonical":"","team":"TN69KNQ5N"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":0},{"id":"UN69SPE21","team_id":"TN69KNQ5N","name":"vanessareigosa","deleted":false,"color":"9f69e7","real_name":"v","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"v","real_name_normalized":"v","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gd0d0c84e105","first_name":"v","last_name":"","image_24":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-512.png","status_text_canonical":"","team":"TN69KNQ5N"},"is_admin":true,"is_owner":true,"is_primary_owner":true,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568445059},{"id":"UN85M758X","team_id":"TN69KNQ5N","name":"gutierrez.clara.es","deleted":false,"color":"4bbe2e","real_name":"Clara","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Clara","real_name_normalized":"Clara","display_name":"Clara","display_name_normalized":"Clara","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g096e4481348","image_24":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-512.png","status_text_canonical":"","team":"TN69KNQ5N"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568072026,"has_2fa":false}],"cache_ts":1568496810,"response_metadata":{"next_cursor":""}}' + http_version: + recorded_at: Sat, 14 Sep 2019 21:33:28 GMT +- request: + method: get + uri: https://slack.com/api/conversations.list?token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '598' + Connection: + - keep-alive + Date: + - Sat, 14 Sep 2019 21:33:30 GMT + Server: + - Apache + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - dff48b6d-0ff5-4747-885a-9943041d9394 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write:bot + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-89s6 + X-Cache: + - Miss from cloudfront + Via: + - 1.1 9046e5a276a05e60ee34c8475e92b8e7.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - KSdij_s_z8qbnFbYjVhMZLB1RHmJRYk0vJozo194NtQcpGDsU5feBw== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channels":[{"id":"CN69KP124","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1568071958,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"UN69SPE21","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TN69KNQ5N"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"Non-work + banter and water cooler conversation","creator":"UN69SPE21","last_set":1568071958},"purpose":{"value":"A + place for non-work-related flimflam, faffing, hodge-podge or jibber-jabber + you''d prefer to keep out of more focused work-related channels.","creator":"UN69SPE21","last_set":1568071958},"previous_names":[],"num_members":2},{"id":"CN8FWJQJJ","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1568071958,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"UN69SPE21","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TN69KNQ5N"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"Company-wide + announcements and work-based matters","creator":"UN69SPE21","last_set":1568071958},"purpose":{"value":"This + channel is for workspace-wide communication and announcements. All members + are in this channel.","creator":"UN69SPE21","last_set":1568071958},"previous_names":[],"num_members":2},{"id":"CN8FWJZ6J","name":"api-project","is_channel":true,"is_group":false,"is_im":false,"created":1568071958,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"api-project","is_shared":false,"parent_conversation":null,"creator":"UN69SPE21","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TN69KNQ5N"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"","creator":"","last_set":0},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' + http_version: + recorded_at: Sat, 14 Sep 2019 21:33:28 GMT +recorded_with: VCR 5.0.0 diff --git a/test/cassettes/make_channels.yml b/test/cassettes/make_channels.yml new file mode 100644 index 00000000..b24b37e3 --- /dev/null +++ b/test/cassettes/make_channels.yml @@ -0,0 +1,154 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/users.list?token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '923' + Connection: + - keep-alive + Date: + - Sat, 14 Sep 2019 21:33:29 GMT + Server: + - Apache + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - 800277bb-e198-4413-ae88-776c1f31dee9 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write:bot + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - users:read + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-lblo + X-Cache: + - Miss from cloudfront + Via: + - 1.1 9046e5a276a05e60ee34c8475e92b8e7.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - Tk3DDx-c9K5PJGpR_MnstwFdSrtalekTFPFz0aEMB7DuXGycSlsBKg== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"TN69KNQ5N","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":null,"tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Slackbot","real_name_normalized":"Slackbot","display_name":"Slackbot","display_name_normalized":"Slackbot","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"sv41d8cd98f0","always_active":true,"first_name":"slackbot","last_name":"","image_24":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png","image_32":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png","image_192":"https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png","image_512":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png","status_text_canonical":"","team":"TN69KNQ5N"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":0},{"id":"UN69SPE21","team_id":"TN69KNQ5N","name":"vanessareigosa","deleted":false,"color":"9f69e7","real_name":"v","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"v","real_name_normalized":"v","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gd0d0c84e105","first_name":"v","last_name":"","image_24":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-512.png","status_text_canonical":"","team":"TN69KNQ5N"},"is_admin":true,"is_owner":true,"is_primary_owner":true,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568445059},{"id":"UN85M758X","team_id":"TN69KNQ5N","name":"gutierrez.clara.es","deleted":false,"color":"4bbe2e","real_name":"Clara","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Clara","real_name_normalized":"Clara","display_name":"Clara","display_name_normalized":"Clara","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g096e4481348","image_24":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-512.png","status_text_canonical":"","team":"TN69KNQ5N"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568072026,"has_2fa":false}],"cache_ts":1568496809,"response_metadata":{"next_cursor":""}}' + http_version: + recorded_at: Sat, 14 Sep 2019 21:33:27 GMT +- request: + method: get + uri: https://slack.com/api/conversations.list?token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '598' + Connection: + - keep-alive + Date: + - Sat, 14 Sep 2019 21:33:29 GMT + Server: + - Apache + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - 023f8b17-bca0-4462-ab5d-f3c4acfd1d70 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write:bot + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-x8wy + X-Cache: + - Miss from cloudfront + Via: + - 1.1 36810aa1793ee589dc8c194860296079.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - rJrddVPev_2xaK5eVy8nmTbpFKwSo5Q9C192DLStZz9g8qCmIRoVCg== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channels":[{"id":"CN69KP124","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1568071958,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"UN69SPE21","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TN69KNQ5N"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"Non-work + banter and water cooler conversation","creator":"UN69SPE21","last_set":1568071958},"purpose":{"value":"A + place for non-work-related flimflam, faffing, hodge-podge or jibber-jabber + you''d prefer to keep out of more focused work-related channels.","creator":"UN69SPE21","last_set":1568071958},"previous_names":[],"num_members":2},{"id":"CN8FWJQJJ","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1568071958,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"UN69SPE21","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TN69KNQ5N"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"Company-wide + announcements and work-based matters","creator":"UN69SPE21","last_set":1568071958},"purpose":{"value":"This + channel is for workspace-wide communication and announcements. All members + are in this channel.","creator":"UN69SPE21","last_set":1568071958},"previous_names":[],"num_members":2},{"id":"CN8FWJZ6J","name":"api-project","is_channel":true,"is_group":false,"is_im":false,"created":1568071958,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"api-project","is_shared":false,"parent_conversation":null,"creator":"UN69SPE21","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TN69KNQ5N"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"","creator":"","last_set":0},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' + http_version: + recorded_at: Sat, 14 Sep 2019 21:33:27 GMT +recorded_with: VCR 5.0.0 diff --git a/test/cassettes/make_users.yml b/test/cassettes/make_users.yml new file mode 100644 index 00000000..726379ca --- /dev/null +++ b/test/cassettes/make_users.yml @@ -0,0 +1,154 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/users.list?token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '923' + Connection: + - keep-alive + Date: + - Sat, 14 Sep 2019 21:33:30 GMT + Server: + - Apache + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - 155f66b1-3562-457a-a5ab-8abaa23bd390 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write:bot + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - users:read + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-vnia + X-Cache: + - Miss from cloudfront + Via: + - 1.1 97d744cbc5fa647cc362d14ff20ecf08.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - pu7XEhYoLtCgIUYj3W20NLhsTzs5_dbL36N9_H-givtkXq_cXFPvlQ== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"TN69KNQ5N","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":null,"tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Slackbot","real_name_normalized":"Slackbot","display_name":"Slackbot","display_name_normalized":"Slackbot","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"sv41d8cd98f0","always_active":true,"first_name":"slackbot","last_name":"","image_24":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png","image_32":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png","image_192":"https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png","image_512":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png","status_text_canonical":"","team":"TN69KNQ5N"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":0},{"id":"UN69SPE21","team_id":"TN69KNQ5N","name":"vanessareigosa","deleted":false,"color":"9f69e7","real_name":"v","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"v","real_name_normalized":"v","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gd0d0c84e105","first_name":"v","last_name":"","image_24":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-512.png","status_text_canonical":"","team":"TN69KNQ5N"},"is_admin":true,"is_owner":true,"is_primary_owner":true,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568445059},{"id":"UN85M758X","team_id":"TN69KNQ5N","name":"gutierrez.clara.es","deleted":false,"color":"4bbe2e","real_name":"Clara","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Clara","real_name_normalized":"Clara","display_name":"Clara","display_name_normalized":"Clara","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g096e4481348","image_24":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-512.png","status_text_canonical":"","team":"TN69KNQ5N"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568072026,"has_2fa":false}],"cache_ts":1568496810,"response_metadata":{"next_cursor":""}}' + http_version: + recorded_at: Sat, 14 Sep 2019 21:33:27 GMT +- request: + method: get + uri: https://slack.com/api/conversations.list?token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '598' + Connection: + - keep-alive + Date: + - Sat, 14 Sep 2019 21:33:30 GMT + Server: + - Apache + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - c60c3635-526b-418a-badb-3e5358342102 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write:bot + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-5he4 + X-Cache: + - Miss from cloudfront + Via: + - 1.1 ee8246c5442dace7525c74f6a799bb47.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C2 + X-Amz-Cf-Id: + - muO7R0G6bBdSDBA0AdWsZgBL_RwHpgiVxGvpwXHXB8s8_k6MOZYIoA== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channels":[{"id":"CN69KP124","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1568071958,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"UN69SPE21","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TN69KNQ5N"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"Non-work + banter and water cooler conversation","creator":"UN69SPE21","last_set":1568071958},"purpose":{"value":"A + place for non-work-related flimflam, faffing, hodge-podge or jibber-jabber + you''d prefer to keep out of more focused work-related channels.","creator":"UN69SPE21","last_set":1568071958},"previous_names":[],"num_members":2},{"id":"CN8FWJQJJ","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1568071958,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"UN69SPE21","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TN69KNQ5N"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"Company-wide + announcements and work-based matters","creator":"UN69SPE21","last_set":1568071958},"purpose":{"value":"This + channel is for workspace-wide communication and announcements. All members + are in this channel.","creator":"UN69SPE21","last_set":1568071958},"previous_names":[],"num_members":2},{"id":"CN8FWJZ6J","name":"api-project","is_channel":true,"is_group":false,"is_im":false,"created":1568071958,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"api-project","is_shared":false,"parent_conversation":null,"creator":"UN69SPE21","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TN69KNQ5N"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"","creator":"","last_set":0},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' + http_version: + recorded_at: Sat, 14 Sep 2019 21:33:28 GMT +recorded_with: VCR 5.0.0 diff --git a/test/cassettes/slack_info.yml b/test/cassettes/slack_info.yml new file mode 100644 index 00000000..67c13904 --- /dev/null +++ b/test/cassettes/slack_info.yml @@ -0,0 +1,154 @@ +--- +http_interactions: +- request: + method: get + uri: https://slack.com/api/conversations.list?token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '598' + Connection: + - keep-alive + Date: + - Thu, 12 Sep 2019 22:43:19 GMT + Server: + - Apache + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - 873c1b9f-7002-4c83-b379-51b93748209a + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write:bot + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - channels:read,groups:read,mpim:read,im:read,read + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-djyg + X-Cache: + - Miss from cloudfront + Via: + - 1.1 68eedbdfabd017beabf28d04341fec21.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C1 + X-Amz-Cf-Id: + - _m1_hbUVpWn8hbuKXQEoQ6l9QGRX-G_MUNO0qJCTpX7ocFKPdbeZKw== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"channels":[{"id":"CN69KP124","name":"random","is_channel":true,"is_group":false,"is_im":false,"created":1568071958,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"random","is_shared":false,"parent_conversation":null,"creator":"UN69SPE21","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TN69KNQ5N"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"Non-work + banter and water cooler conversation","creator":"UN69SPE21","last_set":1568071958},"purpose":{"value":"A + place for non-work-related flimflam, faffing, hodge-podge or jibber-jabber + you''d prefer to keep out of more focused work-related channels.","creator":"UN69SPE21","last_set":1568071958},"previous_names":[],"num_members":2},{"id":"CN8FWJQJJ","name":"general","is_channel":true,"is_group":false,"is_im":false,"created":1568071958,"is_archived":false,"is_general":true,"unlinked":0,"name_normalized":"general","is_shared":false,"parent_conversation":null,"creator":"UN69SPE21","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TN69KNQ5N"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"Company-wide + announcements and work-based matters","creator":"UN69SPE21","last_set":1568071958},"purpose":{"value":"This + channel is for workspace-wide communication and announcements. All members + are in this channel.","creator":"UN69SPE21","last_set":1568071958},"previous_names":[],"num_members":2},{"id":"CN8FWJZ6J","name":"api-project","is_channel":true,"is_group":false,"is_im":false,"created":1568071958,"is_archived":false,"is_general":false,"unlinked":0,"name_normalized":"api-project","is_shared":false,"parent_conversation":null,"creator":"UN69SPE21","is_ext_shared":false,"is_org_shared":false,"shared_team_ids":["TN69KNQ5N"],"pending_shared":[],"pending_connected_team_ids":[],"is_pending_ext_shared":false,"is_member":true,"is_private":false,"is_mpim":false,"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"","creator":"","last_set":0},"previous_names":[],"num_members":2}],"response_metadata":{"next_cursor":""}}' + http_version: + recorded_at: Thu, 12 Sep 2019 22:43:17 GMT +- request: + method: get + uri: https://slack.com/api/users.list?token= + body: + encoding: US-ASCII + string: '' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + response: + status: + code: 200 + message: OK + headers: + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '921' + Connection: + - keep-alive + Date: + - Thu, 12 Sep 2019 23:04:29 GMT + Server: + - Apache + X-Content-Type-Options: + - nosniff + X-Slack-Req-Id: + - 6090e9a3-a797-4ba8-bfba-f0fb9a7cfbe2 + X-Oauth-Scopes: + - identify,channels:read,users:read,chat:write:bot + Expires: + - Mon, 26 Jul 1997 05:00:00 GMT + Cache-Control: + - private, no-cache, no-store, must-revalidate + Access-Control-Expose-Headers: + - x-slack-req-id, retry-after + X-Xss-Protection: + - '0' + X-Accepted-Oauth-Scopes: + - users:read + Vary: + - Accept-Encoding + Pragma: + - no-cache + Access-Control-Allow-Headers: + - slack-route, x-slack-version-ts + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Referrer-Policy: + - no-referrer + Access-Control-Allow-Origin: + - "*" + X-Via: + - haproxy-www-7x6t + X-Cache: + - Miss from cloudfront + Via: + - 1.1 0a2ce08fa1ec3c33302a7547d3305978.cloudfront.net (CloudFront) + X-Amz-Cf-Pop: + - SEA19-C1 + X-Amz-Cf-Id: + - 3Hthot-Z57oyO8lDjQZl1xF3jPhY6K2_SY0NhNc3WW4Mw_XCe4e9fA== + body: + encoding: ASCII-8BIT + string: '{"ok":true,"members":[{"id":"USLACKBOT","team_id":"TN69KNQ5N","name":"slackbot","deleted":false,"color":"757575","real_name":"Slackbot","tz":null,"tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Slackbot","real_name_normalized":"Slackbot","display_name":"Slackbot","display_name_normalized":"Slackbot","fields":null,"status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"sv41d8cd98f0","always_active":true,"first_name":"slackbot","last_name":"","image_24":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_24.png","image_32":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_32.png","image_48":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_48.png","image_72":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_72.png","image_192":"https:\/\/a.slack-edge.com\/80588\/marketing\/img\/avatars\/slackbot\/avatar-slackbot.png","image_512":"https:\/\/a.slack-edge.com\/80588\/img\/slackbot_512.png","status_text_canonical":"","team":"TN69KNQ5N"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":0},{"id":"UN69SPE21","team_id":"TN69KNQ5N","name":"vanessareigosa","deleted":false,"color":"9f69e7","real_name":"v","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"v","real_name_normalized":"v","display_name":"","display_name_normalized":"","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"gd0d0c84e105","first_name":"v","last_name":"","image_24":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/d0d0c84e10551c2dae93d889fd0a8d66.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0001-512.png","status_text_canonical":"","team":"TN69KNQ5N"},"is_admin":true,"is_owner":true,"is_primary_owner":true,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568072074},{"id":"UN85M758X","team_id":"TN69KNQ5N","name":"gutierrez.clara.es","deleted":false,"color":"4bbe2e","real_name":"Clara","tz":"America\/Los_Angeles","tz_label":"Pacific + Daylight Time","tz_offset":-25200,"profile":{"title":"","phone":"","skype":"","real_name":"Clara","real_name_normalized":"Clara","display_name":"Clara","display_name_normalized":"Clara","status_text":"","status_emoji":"","status_expiration":0,"avatar_hash":"g096e4481348","image_24":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-24.png","image_32":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-32.png","image_48":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-48.png","image_72":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-72.png","image_192":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-192.png","image_512":"https:\/\/secure.gravatar.com\/avatar\/096e4481348a00561f120556cb049e0d.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F80588%2Fimg%2Favatars%2Fuser_shapes%2Fava_0006-512.png","status_text_canonical":"","team":"TN69KNQ5N"},"is_admin":false,"is_owner":false,"is_primary_owner":false,"is_restricted":false,"is_ultra_restricted":false,"is_bot":false,"is_app_user":false,"updated":1568072026,"has_2fa":false}],"cache_ts":1568329469,"response_metadata":{"next_cursor":""}}' + http_version: + recorded_at: Thu, 12 Sep 2019 23:04:27 GMT +recorded_with: VCR 5.0.0