| 
									
										
										
										
											2023-05-22 12:09:14 +10:00
										 |  |  | #frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | require_relative "../../../../support/openai_completions_inference_stubs" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | RSpec.describe DiscourseAi::AiBot::Commands::SearchCommand do | 
					
						
							|  |  |  |   fab!(:bot_user) { User.find(DiscourseAi::AiBot::EntryPoint::GPT3_5_TURBO_ID) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   before { SearchIndexer.enable } | 
					
						
							|  |  |  |   after { SearchIndexer.disable } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe "#process" do | 
					
						
							| 
									
										
										
										
											2023-05-22 15:14:26 +10:00
										 |  |  |     it "can handle no results" do | 
					
						
							|  |  |  |       post1 = Fabricate(:post) | 
					
						
							|  |  |  |       search = described_class.new(bot_user, post1) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-08-04 09:37:58 +10:00
										 |  |  |       results = search.process(query: "order:fake ABDDCDCEDGDG") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(results[:args]).to eq({ query: "order:fake ABDDCDCEDGDG" }) | 
					
						
							| 
									
										
										
										
											2023-06-21 17:10:30 +10:00
										 |  |  |       expect(results[:rows]).to eq([]) | 
					
						
							| 
									
										
										
										
											2023-06-20 08:45:31 +10:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "supports subfolder properly" do | 
					
						
							|  |  |  |       Discourse.stubs(:base_path).returns("/subfolder") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       post1 = Fabricate(:post) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       search = described_class.new(bot_user, post1) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-08-04 09:37:58 +10:00
										 |  |  |       results = search.process(limit: 1, user: post1.user.username) | 
					
						
							| 
									
										
										
										
											2023-06-20 08:45:31 +10:00
										 |  |  |       expect(results[:rows].to_s).to include("/subfolder" + post1.url) | 
					
						
							| 
									
										
										
										
											2023-05-22 15:14:26 +10:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-22 12:09:14 +10:00
										 |  |  |     it "can handle limits" do | 
					
						
							|  |  |  |       post1 = Fabricate(:post) | 
					
						
							|  |  |  |       _post2 = Fabricate(:post, user: post1.user) | 
					
						
							|  |  |  |       _post3 = Fabricate(:post, user: post1.user) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       # search has no built in support for limit: so handle it from the outside | 
					
						
							|  |  |  |       search = described_class.new(bot_user, post1) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-08-04 09:37:58 +10:00
										 |  |  |       results = search.process(limit: 2, user: post1.user.username) | 
					
						
							| 
									
										
										
										
											2023-05-22 12:09:14 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-20 08:45:31 +10:00
										 |  |  |       expect(results[:column_names].length).to eq(4) | 
					
						
							|  |  |  |       expect(results[:rows].length).to eq(2) | 
					
						
							| 
									
										
										
										
											2023-05-23 23:08:17 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  |       # just searching for everything | 
					
						
							| 
									
										
										
										
											2023-08-04 09:37:58 +10:00
										 |  |  |       results = search.process(order: "latest_topic") | 
					
						
							| 
									
										
										
										
											2023-06-20 08:45:31 +10:00
										 |  |  |       expect(results[:rows].length).to be > 1
 | 
					
						
							| 
									
										
										
										
											2023-05-22 12:09:14 +10:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |