getPdo()->sqliteCreateFunction('FIND_IN_SET', static function ($value, $list): int { $index = array_search($value, explode(',', (string) $list), true); return $index === false ? 0 : $index + 1; }); } public function test_reuses_the_exact_company_label_or_item_rule_without_scanning_again(): void { $this->rows([ [1, '000123', 'positive', null], [1, '000123', 'positive', null], [1, '260901-ABC', 'other', 'A,X00006'], [1, 'NO', 'other', 'X000060'], [2, 'OTHER-COMPANY', 'positive', null], ]); $lookup = app(PlantingOrderLabelLookup::class); $result = $lookup->orderNumbers(1, ['positive']); sort($result); $this->assertSame(['000123', '260901-ABC'], $result); DB::connection()->enableQueryLog(); $this->assertSame($result, tap($lookup->orderNumbers(1, ['positive']), static function (&$rows): void { sort($rows); })); $this->assertCount(0, array_filter(DB::connection()->getQueryLog(), static fn ($q) => str_contains($q['query'], 'from "ak_jst_order_labels"'))); } public function test_shared_revision_invalidates_another_instances_local_cache(): void { $this->rows([[1, 'A', 'positive', null], [1, 'B', 'other', null]]); $lookup = app(PlantingOrderLabelLookup::class); $this->assertSame(['A'], $lookup->orderNumbers(1, ['positive'])); DB::table('jst_order_labels')->where('order_no', 'B')->update(['item_code' => 'X00006']); // A different workstation changes the shared revision; local file cache remains. Cache::store('upstream_shared')->forever('planting-order-labels:v1:1:revision', 'other-instance'); $result = $lookup->orderNumbers(1, ['positive']); sort($result); $this->assertSame(['A', 'B'], $result); } public function test_rule_changes_and_item_only_classification_do_not_reuse_old_results(): void { $this->rows([[1, 'A', 'positive', null], [1, 'B', 'other', 'X00006']]); $lookup = app(PlantingOrderLabelLookup::class); $this->assertCount(2, $lookup->orderNumbers(1, ['positive'])); $this->assertSame(['B'], $lookup->orderNumbers(1, [])); DB::table('jst_order_labels')->where('order_no', 'B')->update(['item_code' => null]); $lookup->forget(1); $this->assertSame([], $lookup->orderNumbers(1, [])); } private function rows(array $rows): void { foreach ($rows as [$company, $number, $label, $code]) { DB::table('jst_order_labels')->insert([ 'company_id' => $company, 'order_no' => $number, 'label' => $label, 'item_code' => $code, 'shop_name' => 'test', 'ordered_at' => '2026-09-01 00:00:00', 'created_at' => now(), 'updated_at' => now(), ]); } } }