Sha256: 2d7ebceb0d4810aa9b1828720346c6a735989acad5de6189f4918f579593a9e4

Contents?: true

Size: 1.83 KB

Versions: 1

Compression:

Stored size: 1.83 KB

Contents

module Daigaku

  class TestResult
    require 'json'

    attr_reader :examples, :example_count, :failure_count

    TEST_PASSED_MESSAGE = "Your code passed all tests. Congratulations!"

    def initialize(result_json)
      @result = begin
        JSON.parse(result_json, symbolize_names: true)
      rescue
        syntax_error_json
      end

      @example_count = @result[:summary][:example_count]
      @failure_count = @result[:summary][:failure_count]

      @examples = @result[:examples].map do |example|
        description = example[:full_description]
        status = example[:status]
        exception = example[:exception]
        message = exception ? exception[:message] : nil

        TestExample.new(description: description, status: status, message: message)
      end
    end

    def passed?
      @examples.reduce(true) do |passed, example|
        passed && example.passed?
      end
    end

    def summary
      if passed?
        TEST_PASSED_MESSAGE
      else
        build_failed_summary
      end
    end

    private

    def build_failed_summary
      message = examples.map do |example|
        "#{example.description}\n#{example.status}: #{example.message}"
      end

      summary = message.map(&:strip).join("\n" * 3)
    end

    def syntax_error_json
      {
        summary: {},
        examples: [
          {
            status: 'failed',
            exception: { message: ":( You got a syntax error in your code!" }
          }
        ]
      }
    end
  end

  class TestExample

    attr_reader :description, :status, :message

    EXAMPLE_PASSED_MESSAGE = "Your code passed this requirement."

    def initialize(args = {})
      @description = args[:description]
      @status = args[:status]
      @message = args[:message] || EXAMPLE_PASSED_MESSAGE
    end

    def passed?
      @status == 'passed'
    end
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
daigaku-0.0.2 lib/daigaku/test_result.rb