service = app(FeatureService::class); $this->data = [ [ "type" => "商品名称", "logic" => "包含", "describe"=>"衣服", ],[ "type" => "订单类型", "logic" => "不包含", "describe"=>"创建", ],[ "type" => "承运商", "logic" => "等于", "describe"=>"顺丰", ],[ "type" => "店铺类型", "logic" => "不包含", "describe"=>"日用品", ],[ "type" => "商品名称", "logic" => "不包含", "describe"=>"鞋子", ],[ "type" => "订单类型", "logic" => "包含", "describe"=>"取消", ],[ "type" => "商品名称", "logic" => "包含", "describe"=>"测试", ],[ "type" => "订单类型", "logic" => "不包含", "describe"=>"实际", ],[ "type" => "店铺类型", "logic" => "等于", "describe"=>"测试", ] ]; } public function testGetMapArray(){ factory(Feature::class,3)->create(); $models = $this->service->getMapArray(); $this->assertGreaterThanOrEqual(3,count($models)); } public function testTranslationFeature(){ $model1 = factory(Feature::class)->create($this->data[0]); $model2 = factory(Feature::class)->create($this->data[1]); $model3 = factory(Feature::class)->create($this->data[2]); $str = $model1->id."&(".$model2->id."|".$model3->id.")"; $result = $this->service->translationFeature($str); $this->assertEquals(3,count($result)); $this->assertEquals("订单类型",$result[1]["type"]); $this->assertEquals(false,$result[0]["strategyGroupStartSign"]); $this->assertEquals(true,$result[1]["strategyGroupStartSign"]); $this->assertEquals("并且",$result[1]["calculation"]); $this->assertEquals(true,$result[2]["strategyGroupEndSign"]); $this->assertEquals("或",$result[2]["calculation"]); } public function testAnalysisFeature(){ $model1 = factory(Feature::class)->create($this->data[4]); $model2 = factory(Feature::class)->create($this->data[5]); $model3 = factory(Feature::class)->create($this->data[3]); $params = [ [ "strategyGroupStartSign" => true, "calculation" => "", "type"=>"商品名称", "logic"=>"不包含", "describe"=>"鞋子", "strategyGroupEndSign" => false, ],[ "strategyGroupStartSign" => false, "calculation" => "并且", "type"=>"订单类型", "logic"=>"包含", "describe"=>"取消", "strategyGroupEndSign" => true, ],[ "strategyGroupStartSign" => false, "calculation" => "或", "type"=>"店铺类型", "logic"=>"不包含", "describe"=>"日用品", "strategyGroupEndSign" => false, ] ]; $expected = "(".$model1->id."&".$model2->id.")|".$model3->id; $result = $this->service->analysisFeature($params); $this->assertIsArray($result); $this->assertCount(2,$result); $this->assertArrayHasKey("feature",$result); $this->assertEquals($expected,$result["feature"]); } public function testFormatFeature(){ $model1 = factory(Feature::class)->make($this->data[0]); $model2 = factory(Feature::class)->make($this->data[1]); $model3 = factory(Feature::class)->make($this->data[2]); $features = [1=>$model1,2=>$model2,3=>$model3]; $result = $this->service->formatFeature($features,"1&(2|3)"); $expected = "商品名称 包含 衣服 并且 (订单类型 不包含 创建 或 承运商 等于 顺丰)"; $this->assertEquals($expected,$result); $columnMapping = ["商品名称"=>"commodity_name","订单类型"=>"order_type","承运商"=>"logistic_name"]; $result = $this->service->formatFeature($features,"1&(2|3)",$columnMapping); $expected = "commodity_name like '%衣服%' and (order_type not like '%创建%' or logistic_name = '顺丰')"; $this->assertEquals($expected,$result); } public function testMatchFeature(){ $model1 = factory(Feature::class)->create($this->data[6]); $model2 = factory(Feature::class)->create($this->data[7]); $model3 = factory(Feature::class)->create($this->data[8]); $columnMapping = ["商品名称"=>"commodity","订单类型"=>"order","店铺类型"=>"shop"]; $matchObject = ["commodity"=>"测试商品","order"=>"TEST","shop"=>"测试"]; $value = $model1->id."&(".$model2->id."&".$model3->id.")"; $result = $this->service->matchFeature($value,$columnMapping,$matchObject); $this->assertEquals(true,$result); $matchObject = ["commodity"=>"测试商品","order"=>"实际","shop"=>"测试"]; $result = $this->service->matchFeature($value,$columnMapping,$matchObject); $this->assertEquals(false,$result); } public function testTruncate(){ Feature::query()->truncate(); $feature = Feature::query()->get(); $this->assertCount(0,$feature); } }