require "dotenv/load" require "slack_mattermost_emoji/mattermost_client" RSpec.describe SlackMattermostEmoji::MattermostClient do it 'should raise if credentials are missing' do expect do SlackMattermostEmoji::MattermostClient.new( username: '', password: '', domain: '', ) end.to raise_error('Mattermost username, password, and domain are all required') end it 'should be able to log in to mattermost using the provided credentials' do client = SlackMattermostEmoji::MattermostClient.new( username: ENV['MATTERMOST_USERNAME'], password: ENV['MATTERMOST_PASSWORD'], domain: ENV['MATTERMOST_DOMAIN'], ) client.authenticate expect(client.authenticated?).to be true end it 'should handle a bad credentials error' do client = SlackMattermostEmoji::MattermostClient.new( username: ENV['MATTERMOST_USERNAME'], password: 'wrongpassword', domain: ENV['MATTERMOST_DOMAIN'], ) expect { client.authenticate }.to raise_error('Invalid Mattermost credentials') end it 'should upload emoji to mattermost' do client = SlackMattermostEmoji::MattermostClient.new( username: ENV['MATTERMOST_USERNAME'], password: ENV['MATTERMOST_PASSWORD'], domain: ENV['MATTERMOST_DOMAIN'], emoji_path: '~/Desktop/slack-emoji', ) token = client.authenticate client.upload_emoji url = "https://#{ENV['MATTERMOST_DOMAIN']}/api/v4/emoji" response = HTTParty.get(url, { headers: { 'Authorization': "Bearer #{token}", } }) emoji = JSON.parse(response.body).map { |e| e['name'] } emoji_on_disk = Dir[File.expand_path('~/Desktop/slack-emoji/*')].map { |e| File.basename(e, '.*') } expect(emoji).to eq(emoji_on_disk) end end