# frozen_string_literal: true

require "rails_helper"

describe WellKnown::NodeInfoController do
  describe "#discovery" do
    subject { get :discovery }

    it "returns the expected response" do
      subject
      parsed = JSON.parse(response.body)
      expect(parsed).to eq({
                             "links" => [
                               {
                                 "rel"  => "http://nodeinfo.diaspora.software/ns/schema/2.1",
                                 "href" => "http://test.host/nodeinfo/2.1",
                               }
                             ],
                           })
    end
  end

  describe "#nodeinfo" do
    subject { get :nodeinfo }

    it "is valid as specified by the schema" do
      get(:discovery)
      schema = response.body
      subject
      parsed = JSON.parse(response.body)
      messages = JSON::Validator.fully_validate(schema, parsed)

      expect(messages).to be_empty
    end

    context "version is 2023.0102.1" do
      before do
        allow(Retrospring::Version).to receive(:to_s).and_return("2023.0102.1")
      end

      it "returns the correct version" do
        subject
        parsed = JSON.parse(response.body)
        expect(parsed["software"]).to eq({
                                           "name"       => "Retrospring",
                                           "version"    => "2023.0102.1",
                                           "repository" => "https://github.com/Retrospring/retrospring",
                                         })
      end
    end

    context "site has users" do
      let(:num_users) { rand(10..50) }

      before do
        FactoryBot.create_list(:user, num_users)
      end

      it "includes the correct user count" do
        subject
        parsed = JSON.parse(response.body)
        expect(parsed.dig("usage", "users", "total")).to eq(num_users)
      end
    end
  end
end