lundi 17 février 2020

how can i use rspec correctly?

My code creates a github gist using the github API. After creating the gist, the API returns a status code to me. If the code is "201" the gist was created. But if it is "400" there was an error. In my code the variable that saves that state is response_status

This is my code:

require 'net/http'
require 'json'
require 'uri'

class Gist
   attr_reader :response_status
   attr_reader :try_again

   def initialize(filename,description,state,content)
       @filename = filename
       @description = description
       @state = state
       @content = content
   end

   def post(uri, request)
       request.basic_auth("JoelAlayon123", "ff11bbd6bc15988fb82f57b6e7806c02ebb596dd")

       request.body = JSON.dump({
           "description" => @description,
           "public" => @state,
           "files" => {
               @filename => {
                   "content" => @content
               }
           }
       })

       req_options = { use_ssl: uri.scheme == "https" }

       begin
           response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
               http.request(request)
       end

       json = response.body
       parsed = JSON.parse(json)
       @response_status = "#{ response.code }"

       if @response_status == "201"
           puts "Tu gist se ha creado con exito. La URL de su gist es: "+ parsed["url"]
       end

       rescue SocketError => se
           puts "Ha ocurrido un error de conexión. Quiere intentar nuevamente?"
           @try_again = gets.chomp.capitalize
       end
   end
end

loop do
   filename= gets.chomp

   if File.exist?("#{filename}") 
       description = gets.chomp
       state = gets.chomp.capitalize

       if state == "Si" 
           state = true;
       elsif state == "No"
           state = false;
       end

       open(filename, "r") { |file| @contenido = file.read() } 
       content = @contenido
       uri = URI.parse("https://api.github.com/gists")
       request = Net::HTTP::Post.new(uri)
       gist = Gist.new(filename,description,state,content)
       gist.post(uri, request)

       break if gist.response_status == "201"
       break if gist.try_again == "No"
   else
       puts "The file does not exist"
       continue = gets.chomp.capitalize
       break if continue == "No"
   end
end

I want to test test cases using rspec, but I did not understand.

It occurred to me as a test case that a Gist be created. For example, I thought about checking if the variable that returns the state of the Gist is equal to "201", but that didn't work for me.

This is my rspec file:

require './git_clases.rb'

RSpec.describe Gist do
    describe "#Gist" do
        it "#Gist created" do
            expect(response_status)==("201")
        end
    end
end

Aucun commentaire:

Enregistrer un commentaire