<commit_before>require File.dirname(__FILE__) + '/../spec_helper'

describe User, " when indexing users with Xapian" do
    fixtures :users

    it "should search by name" do
        rebuild_xapian_index
          # def InfoRequest.full_search(models, query, order, ascending, collapse, per_page, page)
        xapian_object = InfoRequest.full_search([User], "Silly", 'created_at', true, nil, 100, 1)
        xapian_object.results.size.should == 1
        xapian_object.results[0][:model].should == users(:silly_name_user)
    end
end

describe PublicBody, " when indexing public bodies with Xapian" do
    fixtures :public_bodies

    before(:all) do
        rebuild_xapian_index
    end

    it "should search index the main name field" do
        xapian_object = InfoRequest.full_search([PublicBody], "humpadinking", 'created_at', true, nil, 100, 1)
        xapian_object.results.size.should == 1
        xapian_object.results[0][:model].should == public_bodies(:humpadink_public_body)
    end

    it "should search index the notes field" do
        xapian_object = InfoRequest.full_search([PublicBody], "albatross", 'created_at', true, nil, 100, 1)
        xapian_object.results.size.should == 1
        xapian_object.results[0][:model].should == public_bodies(:humpadink_public_body)
    end

end

describe PublicBody, " when indexing requests by body they are to" do
    fixtures :public_bodies, :info_request_events, :info_requests

    it "should find requests to the body" do
        rebuild_xapian_index
        xapian_object = InfoRequest.full_search([InfoRequestEvent], "requested_from:tgq", 'created_at', true, nil, 100, 1)
        xapian_object.results.size.should == 4
    end

    it "should update index correctly when URL name of body changes" do
        # initial search
        rebuild_xapian_index
        xapian_object = InfoRequest.full_search([InfoRequestEvent], "requested_from:tgq", 'created_at', true, nil, 100, 1)
        xapian_object.results.size.should == 4
        models_found_before = xapian_object.results.map { |x| x[:model] }

        # change the URL name of the body
        body = public_bodies(:geraldine_public_body)
        body.short_name = 'GQ'
        body.save!
        body.url_name.should == 'gq'
        update_xapian_index

        # check we get results expected
        xapian_object = InfoRequest.full_search([InfoRequestEvent], "requested_from:tgq", 'created_at', true, nil, 100, 1)
        xapian_object.results.size.should == 0
        xapian_object = InfoRequest.full_search([InfoRequestEvent], "requested_from:gq", 'created_at', true, nil, 100, 1)
        xapian_object.results.size.should == 4
        models_found_after = xapian_object.results.map { |x| x[:model] }

        models_found_before.should == models_found_after
    end
end

describe User, " when indexing requests by user they are from" do
    fixtures :users, :info_request_events, :info_requests

    it "should find requests from the user" do
        rebuild_xapian_index
        xapian_object = InfoRequest.full_search([InfoRequestEvent], "requested_by:bob_smith", 'created_at', true, nil, 100, 1)
        xapian_object.results.size.should == 4
    end

    it "should find just the sent message events from a particular user" do
        rebuild_xapian_index
          # def InfoRequest.full_search(models, query, order, ascending, collapse, per_page, page)
        xapian_object = InfoRequest.full_search([InfoRequestEvent], "requested_by:bob_smith variety:sent", 'created_at', true, nil, 100, 1)
        xapian_object.results.size.should == 2
        xapian_object.results[1][:model].should == info_request_events(:useless_outgoing_message_event)
        xapian_object.results[0][:model].should == info_request_events(:silly_outgoing_message_event)
    end

    it "should not find it when one of the request's users is changed" do
        rebuild_xapian_index
        silly_user = users(:silly_name_user)
        naughty_chicken_request = info_requests(:naughty_chicken_request)
        naughty_chicken_request.user = silly_user
        naughty_chicken_request.save!

        update_xapian_index

          # def InfoRequest.full_search(models, query, order, ascending, collapse, per_page, page)
        xapian_object = InfoRequest.full_search([InfoRequestEvent], "requested_by:bob_smith", 'created_at', true, 'request_collapse', 100, 1)
        xapian_object.results.size.should == 1
        xapian_object.results[0][:model].should == info_request_events(:silly_comment_event)
    end

    it "should not get confused searching for requests when one user has a name which has same stem as another" do
        rebuild_xapian_index

        bob_smith_user = users(:bob_smith_user)
        bob_smith_user.name = "<NAME>"
        bob_smith_user.url_name.should == 'john_king'
        bob_smith_user.save!

        silly_user = users(:silly_name_user)
        silly_user.name = "<NAME>"
        silly_user.url_name.should == 'john_k'
        silly_user.save!

        naughty_chicken_request = info_requests(:naughty_chicken_request)
        naughty_chicken_request.user = silly_user
        naughty_chicken_request.save!

        update_xapian_index

          # def InfoRequest.full_search(models, query, order, ascending, collapse, per_page, page)
        xapian_object = InfoRequest.full_search([InfoRequestEvent], "requested_by:john_k", 'created_at', true, 'request_collapse', 100, 1)
        xapian_object.results.size.should == 1
        xapian_object.results[0][:model].should == info_request_events(:silly_outgoing_message_event)
    end


    it "should update index correctly when URL name of user changes" do
        # initial search
        rebuild_xapian_index
        xapian_object = InfoRequest.full_search([InfoRequestEvent], "requested_by:bob_smith", 'created_at', true, nil, 100, 1)
        xapian_object.results.size.should == 4
        models_found_before = xapian_object.results.map { |x| x[:model] }

        # change the URL name of the body
        u= users(:bob_smith_user)
        u.name = '<NAME>'
        u.save!
        u.url_name.should == 'robert_smith'
        update_xapian_index

        # check we get results expected
        xapian_object = InfoRequest.full_search([InfoRequestEvent], "requested_by:bob_smith", 'created_at', true, nil, 100, 1)
        xapian_object.results.size.should == 0
        xapian_object = InfoRequest.full_search([InfoRequestEvent], "requested_by:robert_smith", 'created_at', true, nil, 100, 1)
        xapian_object.results.size.should == 4
        models_found_after = xapian_object.results.map { |x| x[:model] }

        models_found_before.should == models_found_after
    end
end

describe User, " when indexing comments by user they are by" do
    fixtures :users, :info_request_events, :info_requests, :comments

    it "should find requests from the user" do
        rebuild_xapian_index
        xapian_object = InfoRequest.full_search([InfoRequestEvent], "commented_by:silly_emnameem", 'created_at', true, nil, 100, 1)
        xapian_object.results.size.should == 1
    end

    it "should update index correctly when URL name of user changes" do
        # initial search
        rebuild_xapian_index
        xapian_object = InfoRequest.full_search([InfoRequestEvent], "commented_by:silly_emnameem", 'created_at', true, nil, 100, 1)
        xapian_object.results.size.should == 1
        models_found_before = xapian_object.results.map { |x| x[:model] }

        # change the URL name of the body
        u = users(:silly_name_user)
        u.name = 'Silly Name'
        u.save!
        u.url_name.should == 'silly_name'
        update_xapian_index

        # check we get results expected
        xapian_object = InfoRequest.full_search([InfoRequestEvent], "commented_by:silly_emnameem", 'created_at', true, nil, 100, 1)
        xapian_object.results.size.should == 0
        xapian_object = InfoRequest.full_search([InfoRequestEvent], "commented_by:silly_name", 'created_at', true, nil, 100, 1)
        xapian_object.results.size.should == 1
        models_found_after = xapian_object.results.map { |x| x[:model] }<commit_msg>Some more fixtures (which weren't needed if the tests are run in a certain order, but are in other orders)<commit_after>require File.dirname(__FILE__) + '/../spec_helper'

describe User, " when indexing users with Xapian" do
    fixtures :users

    it "should search by name" do
        rebuild_xapian_index
          # def InfoRequest.full_search(models, query, order, ascending, collapse, per_page, page)
        xapian_object = InfoRequest.full_search([User], "Silly", 'created_at', true, nil, 100, 1)
        xapian_object.results.size.should == 1
        xapian_object.results[0][:model].should == users(:silly_name_user)
    end
end

describe PublicBody, " when indexing public bodies with Xapian" do
    fixtures :public_bodies, :incoming_messages, :outgoing_messages

    before(:all) do
        rebuild_xapian_index
    end

    it "should search index the main name field" do
        xapian_object = InfoRequest.full_search([PublicBody], "humpadinking", 'created_at', true, nil, 100, 1)
        xapian_object.results.size.should == 1
        xapian_object.results[0][:model].should == public_bodies(:humpadink_public_body)
    end

    it "should search index the notes field" do
        xapian_object = InfoRequest.full_search([PublicBody], "albatross", 'created_at', true, nil, 100, 1)
        xapian_object.results.size.should == 1
        xapian_object.results[0][:model].should == public_bodies(:humpadink_public_body)
    end

end

describe PublicBody, " when indexing requests by body they are to" do
    fixtures :public_bodies, :info_request_events, :info_requests

    it "should find requests to the body" do
        rebuild_xapian_index
        xapian_object = InfoRequest.full_search([InfoRequestEvent], "requested_from:tgq", 'created_at', true, nil, 100, 1)
        xapian_object.results.size.should == 4
    end

    it "should update index correctly when URL name of body changes" do
        # initial search
        rebuild_xapian_index
        xapian_object = InfoRequest.full_search([InfoRequestEvent], "requested_from:tgq", 'created_at', true, nil, 100, 1)
        xapian_object.results.size.should == 4
        models_found_before = xapian_object.results.map { |x| x[:model] }

        # change the URL name of the body
        body = public_bodies(:geraldine_public_body)
        body.short_name = 'GQ'
        body.save!
        body.url_name.should == 'gq'
        update_xapian_index

        # check we get results expected
        xapian_object = InfoRequest.full_search([InfoRequestEvent], "requested_from:tgq", 'created_at', true, nil, 100, 1)
        xapian_object.results.size.should == 0
        xapian_object = InfoRequest.full_search([InfoRequestEvent], "requested_from:gq", 'created_at', true, nil, 100, 1)
        xapian_object.results.size.should == 4
        models_found_after = xapian_object.results.map { |x| x[:model] }

        models_found_before.should == models_found_after
    end
end

describe User, " when indexing requests by user they are from" do
    fixtures :users, :info_request_events, :info_requests, :incoming_messages, :outgoing_messages

    it "should find requests from the user" do
        rebuild_xapian_index
        xapian_object = InfoRequest.full_search([InfoRequestEvent], "requested_by:bob_smith", 'created_at', true, nil, 100, 1)
        xapian_object.results.size.should == 4
    end

    it "should find just the sent message events from a particular user" do
        rebuild_xapian_index
          # def InfoRequest.full_search(models, query, order, ascending, collapse, per_page, page)
        xapian_object = InfoRequest.full_search([InfoRequestEvent], "requested_by:bob_smith variety:sent", 'created_at', true, nil, 100, 1)
        xapian_object.results.size.should == 2
        xapian_object.results[1][:model].should == info_request_events(:useless_outgoing_message_event)
        xapian_object.results[0][:model].should == info_request_events(:silly_outgoing_message_event)
    end

    it "should not find it when one of the request's users is changed" do
        rebuild_xapian_index
        silly_user = users(:silly_name_user)
        naughty_chicken_request = info_requests(:naughty_chicken_request)
        naughty_chicken_request.user = silly_user
        naughty_chicken_request.save!

        update_xapian_index

          # def InfoRequest.full_search(models, query, order, ascending, collapse, per_page, page)
        xapian_object = InfoRequest.full_search([InfoRequestEvent], "requested_by:bob_smith", 'created_at', true, 'request_collapse', 100, 1)
        xapian_object.results.size.should == 1
        xapian_object.results[0][:model].should == info_request_events(:silly_comment_event)
    end

    it "should not get confused searching for requests when one user has a name which has same stem as another" do
        rebuild_xapian_index

        bob_smith_user = users(:bob_smith_user)
        bob_smith_user.name = "<NAME>"
        bob_smith_user.url_name.should == 'john_king'
        bob_smith_user.save!

        silly_user = users(:silly_name_user)
        silly_user.name = "<NAME>"
        silly_user.url_name.should == 'john_k'
        silly_user.save!

        naughty_chicken_request = info_requests(:naughty_chicken_request)
        naughty_chicken_request.user = silly_user
        naughty_chicken_request.save!

        update_xapian_index

          # def InfoRequest.full_search(models, query, order, ascending, collapse, per_page, page)
        xapian_object = InfoRequest.full_search([InfoRequestEvent], "requested_by:john_k", 'created_at', true, 'request_collapse', 100, 1)
        xapian_object.results.size.should == 1
        xapian_object.results[0][:model].should == info_request_events(:silly_outgoing_message_event)
    end


    it "should update index correctly when URL name of user changes" do
        # initial search
        rebuild_xapian_index
        xapian_object = InfoRequest.full_search([InfoRequestEvent], "requested_by:bob_smith", 'created_at', true, nil, 100, 1)
        xapian_object.results.size.should == 4
        models_found_before = xapian_object.results.map { |x| x[:model] }

        # change the URL name of the body
        u= users(:bob_smith_user)
        u.name = '<NAME>'
        u.save!
        u.url_name.should == 'robert_smith'
        update_xapian_index

        # check we get results expected
        xapian_object = InfoRequest.full_search([InfoRequestEvent], "requested_by:bob_smith", 'created_at', true, nil, 100, 1)
        xapian_object.results.size.should == 0
        xapian_object = InfoRequest.full_search([InfoRequestEvent], "requested_by:robert_smith", 'created_at', true, nil, 100, 1)
        xapian_object.results.size.should == 4
        models_found_after = xapian_object.results.map { |x| x[:model] }

        models_found_before.should == models_found_after
    end
end

describe User, " when indexing comments by user they are by" do
    fixtures :users, :info_request_events, :info_requests, :comments, :incoming_messages, :outgoing_messages

    it "should find requests from the user" do
        rebuild_xapian_index
        xapian_object = InfoRequest.full_search([InfoRequestEvent], "commented_by:silly_emnameem", 'created_at', true, nil, 100, 1)
        xapian_object.results.size.should == 1
    end

    it "should update index correctly when URL name of user changes" do
        # initial search
        rebuild_xapian_index
        xapian_object = InfoRequest.full_search([InfoRequestEvent], "commented_by:silly_emnameem", 'created_at', true, nil, 100, 1)
        xapian_object.results.size.should == 1
        models_found_before = xapian_object.results.map { |x| x[:model] }

        # change the URL name of the body
        u = users(:silly_name_user)
        u.name = 'Silly Name'
        u.save!
        u.url_name.should == 'silly_name'
        update_xapian_index

        # check we get results expected
        xapian_object = InfoRequest.full_search([InfoRequestEvent], "commented_by:silly_emnameem", 'created_at', true, nil, 100, 1)
        xapian_object.results.size.should == 0
        xapian_object = InfoRequest.full_search([InfoRequestEvent], "commented_by:silly_name", 'created_at', true, nil, 100, 1)
        xapian_object.results.size.should == 1
        models_found_after = xapian_object.results.map { |x| x[:model] }
{'fraction_non_alphanumeric': 0.09544047113107887, 'fraction_numerical': 0.011778276971647137, 'mean_word_length': 3.463956639566396, 'pattern_counts': {'":': 0, '<': 9, '<?xml version=': 0, '>': 9, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1176829', 'n_tokens_mistral': 5432, 'n_tokens_neox': 5138, 'n_words': 1185}