public function testCommandWhenAmzRepoResponseCannotBeObtainedForOneAsin() { $prod_repo_mock = Mockery::mock('Giftertipster\\Repository\\Product\\ProductRepositoryInterface'); $prod_repo_mock->shouldReceive('getRefreshedIdRange')->once()->with(1, null, 100)->andReturn([['id' => 1, 'vendor' => 'amz', 'vendor_id' => 'a1'], ['id' => 2, 'vendor' => 'amz', 'vendor_id' => 'a2']]); $prod_repo_mock->shouldReceive('getRefreshedIdRange')->once()->with(3, null, 100)->andReturn(false); $this->app->instance('Giftertipster\\Repository\\Product\\ProductRepositoryInterface', $prod_repo_mock); $amz_prod_repo_mock = Mockery::mock('Giftertipster\\Repository\\AmzProduct\\AmzProductRepositoryInterface'); $amz_prod_repo_mock->shouldReceive('detailLookup')->with('a1, a2')->once()->andReturn(false); $amz_prod_repo_mock->shouldReceive('detailLookup')->with('a1')->once()->andReturn(false); $amz_prod_repo_mock->shouldReceive('detailLookup')->with('a2')->once()->andReturn([['vendor' => 'amz', 'vendor_id' => 'a2']]); $amz_prod_repo_mock->shouldReceive('errors')->andReturn(['errors']); $this->app->instance('Giftertipster\\Repository\\AmzProduct\\AmzProductRepositoryInterface', $amz_prod_repo_mock); \Log::shouldReceive('error')->twice(); $prod_suite_repo_mock = Mockery::mock('Giftertipster\\Repository\\ProductSuite\\ProductSuiteRepositoryInterface'); $prod_suite_repo_mock->shouldreceive('disableProductOffering')->with(1)->once()->andReturn(true); $prod_suite_repo_mock->shouldreceive('update')->with(2, ['vendor' => 'amz', 'vendor_id' => 'a2'], true)->once()->andReturn(true); $this->app->instance('Giftertipster\\Repository\\ProductSuite\\ProductSuiteRepositoryInterface', $prod_suite_repo_mock); $job = $this->app->make('Giftertipster\\Entity\\Eloquent\\RangeCronJob'); $job->last_id_processed = 0; $job->last_status = 'success'; $cron_job_repo_mock = Mockery::mock('Giftertipster\\Repository\\RangeCronJob\\RangeCronJobRepositoryInterface'); $cron_job_repo_mock->shouldReceive('findJob')->with('products_update')->once()->andReturn($job); $cron_job_repo_mock->shouldReceive('updateJob')->with($job, 'in_progress', 2)->once()->andReturn(true); $cron_job_repo_mock->shouldReceive('updateJob')->with($job, 'success', 2)->once()->andReturn(true); $this->app->instance('Giftertipster\\Repository\\RangeCronJob\\RangeCronJobRepositoryInterface', $cron_job_repo_mock); $tester = new CommandTester(new UpdateProducts()); $tester->execute([]); }
public function testIsDueException() { Log::shouldReceive('error')->once(); $scheduler = m::mock('Indatus\\Dispatcher\\Scheduling\\Schedulable', function ($m) { $m->shouldReceive('getSchedule')->once()->andReturn('asdf'); }); $this->assertFalse($this->scheduleService->isDue($scheduler)); }
public function testMailSending() { $this->app['config']->set('settings.log.level', 'debug'); Log::shouldReceive('debug')->once(); $faker = Faker::create(); $this->app['mailer']->raw($faker->paragraph, function ($message) use($faker) { $message->from($faker->email, $faker->name)->to($faker->email, $faker->name)->subject($faker->sentence); }); }
public function testConfigConfigsApaioWithDefaultUserAndLogsErrorWhenSpecifiedUserDoesNotExist() { $this->ConfigMock->shouldReceive('setCountry')->once()->with(Config::get('api.amz_product_api.giftertipster-20.country'))->andReturn($this->ConfigMock); $this->ConfigMock->shouldReceive('setAccessKey')->once()->with(Config::get('api.amz_product_api.giftertipster-20.access_key'))->andReturn($this->ConfigMock); $this->ConfigMock->shouldReceive('setSecretKey')->once()->with(Config::get('api.amz_product_api.giftertipster-20.secret_key'))->andReturn($this->ConfigMock); $this->ConfigMock->shouldReceive('setAssociateTag')->once()->with('giftertipster-20')->andReturn($this->ConfigMock); \Log::shouldReceive('error')->once(); $this->app->instance('ApaiIO\\Configuration\\GenericConfiguration', $this->ConfigMock); $this->app->instance('ApaiIO\\ApaiIO', $this->ApaiIOMock); $api = $this->app->make('Giftertipster\\Service\\Api\\AmzProductApi\\ApaiIO\\ApaiIOAmzProductApi'); $api->setUser('roobar user that does not exist'); }
/** * Test handle WorkerCommand * * @return void */ public function testHandle() { $jobFaker = factory(JobInspect::class)->create(); $job = Mockery::mock(JobInspect::class); $reader = Mockery::mock(ResultReader::class); $worker = Mockery::mock(WorkerCommand::class . '[updateJob, runCommand]', [$job, $reader]); $job->shouldReceive('getUnhandledJob->first')->andReturn($jobFaker); $reader->shouldReceive('setJob'); $reader->shouldReceive('run')->andReturn(true); $worker->shouldReceive('updateJob')->twice(); $worker->shouldReceive('runCommand')->andReturn('process died'); \Log::shouldReceive('error'); $worker->handle(); }
public function testMessagesThrowException() { $email = factory(App\Email::class)->make(['mail_ssl' => true]); $server = m::mock('Fetch\\Server[getMessages]', [$email->mail_host]); $server->shouldReceive('getMessages')->once()->andThrow('ErrorException', 'Can not connect to imap server.'); Log::shouldReceive('notice'); $imap = m::mock('App\\Services\\Piper\\Imap\\ImapServer[newServer]', [$email, $this->app]); $imap->shouldReceive('newServer')->once()->andReturn($server); try { $return = $imap->messages(); $this->assertEquals(0, $return->count()); } catch (ErrorException $e) { $this->assertEquals('Can not connect to imap server.', $e->getMessage()); } }
public function testParse() { //stubs $blog_post = '<!--product 32 image--> <!--test that this is ignored--> <a href="<!--pRoduct 323 link-->">invalid link</a> <!--product 323 liNk--> here is a really cool <!--product 32 link--> blog post <a href="<!--product 32 link-->">product link</a>'; $expected_blog_post = '<image stub> <!--test that this is ignored--> invalid link <p><em>This product link is no longer available</em></p> here is a really cool <p><a href="http://www.amazon.com/testfoobardude12345678901234567890" target="_blank">http://www.amazon.com/testfoobardude12345678901234...</a></p> blog post <a href="http://www.amazon.com/testfoobardude12345678901234567890" target="_blank">product link</a>'; $product = ['detail_url' => 'http://testlink', 'images' => 'stub image set']; $sales_agent_modified = 'http://www.amazon.com/testfoobardude12345678901234567890'; $author_email = '*****@*****.**'; //mocks $product_suite_repo_mock = \Mockery::mock('Giftertipster\\Repository\\ProductSuite\\ProductSuiteRepositoryInterface'); $product_suite_repo_mock->shouldReceive('find')->with(32)->once()->andReturn($product); $product_suite_repo_mock->shouldReceive('find')->with(323)->once()->andThrow(new \InvalidArgumentException()); $this->app->instance('Giftertipster\\Repository\\ProductSuite\\ProductSuiteRepositoryInterface', $product_suite_repo_mock); $sales_agent_mgr_mock = \Mockery::mock('Giftertipster\\Service\\SalesAgent\\SalesAgentMgrInterface'); $sales_agent_mgr_mock->shouldReceive('setSalesAgentByEmail')->with($author_email)->once(); $sales_agent_mgr_mock->shouldReceive('updateSalesAgentInString')->with($product['detail_url'])->twice()->andReturn($sales_agent_modified); $this->app->instance('Giftertipster\\Service\\SalesAgent\\SalesAgentMgrInterface', $sales_agent_mgr_mock); \HTML::shouldReceive('makeImage')->with($product['images'], 'primary', 350, 350, [], [])->andReturn('<image stub>'); \Log::shouldReceive('error')->once(); //action $response = $this->service()->parse($blog_post, $author_email); //assertions assertThat($response, identicalTo($expected_blog_post)); }
public function testServerStarts() { Log::shouldReceive('info')->once()->with('[NanoFTPd] Server starting...'); $this->app['nanoftpd']->shouldRun = false; $this->app['nanoftpd']->run(); }
public function testCompileWithError() { GCCompiler::cleanup(); \App::instance('gcc.compiler', Mockery::mock('\\Closure\\RemoteCompiler')->shouldReceive('setMode')->once()->shouldReceive('addLocalFile')->once()->shouldReceive('compile')->once()->shouldReceive('getCompilerResponse')->once()->andReturn(Mockery::mock('\\Closure\\CompilerInterface')->shouldReceive('hasErrors')->once()->andReturn(true)->shouldReceive('getErrors')->once()->andReturn('error')->shouldReceive('getCompiledCode')->once()->andReturn('')->mock())->mock()); \Log::shouldReceive('error')->once(); $gcc = new GCCompiler($this->app['config']); $result = $gcc->compile('file1.js'); $this->assertEquals($result, false); $compiled = \File::glob(GCCompiler::storagePath(DIRECTORY_SEPARATOR . '*')); $this->assertEquals(1, count($compiled)); }
public function testSetSalesAgentByEmailDoesntDoAnythingAndReturnFalseWhenTheSalesAgentIsNotValid() { //mocks $user_repo_mock = \Mockery::mock('Giftertipster\\Repository\\User\\UserRepositoryInterface'); $user_repo_mock->shouldReceive('getUsersSalesAgentIdByEmail')->once()->with('*****@*****.**')->andReturn('invalid sales agent'); $this->app->instance('Giftertipster\\Repository\\User\\UserRepositoryInterface', $user_repo_mock); \Log::shouldReceive('warning'); $this->salesAgentMgr()->setSalesAgentByEmail('*****@*****.**'); assertThat($this->salesAgentMgr()->getSalesAgent(), identicalTo('giftertipster-20')); }
public function testProcessLoadProductsLogsNoticeExceptionAndDeletesProdSuiteWhenLoadProdSuiteFailsAndOpIsIdea() { $product_model_1 = Factory::make('Giftertipster\\Entity\\Eloquent\\Product', ['id' => 1000]); $product_model_2 = Factory::make('Giftertipster\\Entity\\Eloquent\\Product', ['id' => 2000]); DB::shouldReceive('beginTransaction')->once(); DB::shouldReceive('commit')->once(); DB::shouldReceive('rollback')->never(); Session::start(); Session::put('AdminProductController.op_id', 100); Session::put('AdminProductController.op_type', 'Idea'); Session::put('AdminProductController.products', [['id' => 'product suite stub 1'], ['id' => 'product suite stub 2']]); AuthMgr::shouldReceive('getLoggedUserId')->twice()->andReturn(2); Log::shouldReceive('notice')->once()->andReturn(true); $category_keyword_generator_mock = Mockery::mock('Giftertipster\\Service\\CategoryKeywords\\CategoryKeywordsGeneratorInterface'); $category_keyword_generator_mock->shouldReceive('make')->twice()->with(['formatted add stub'])->andReturn(['category', 'keywords']); $this->app->instance('Giftertipster\\Service\\CategoryKeywords\\CategoryKeywordsGeneratorInterface', $category_keyword_generator_mock); $add_form_prepper_mock = Mockery::mock('Giftertipster\\Service\\Add\\AddFormPrepperInterface'); $add_form_prepper_mock->shouldReceive('prep')->with(['admin add stub'])->once()->andReturn(['admin add stub']); $this->app->instance('Giftertipster\\Service\\Add\\AddFormPrepperInterface', $add_form_prepper_mock); $prod_suite_repo = Mockery::mock('Giftertipster\\Repository\\ProductSuite\\ProductSuiteRepositoryInterface'); $prod_suite_repo->shouldReceive('finderCreate')->with(['id' => 'product suite stub 1', 'keyword_profile' => ['profile' => ['keywords', 'profile']], 'category_keywords' => ['category', 'keywords']], 'Idea', 100, 2, false)->andReturn($product_model_1); $prod_suite_repo->shouldReceive('finderCreate')->with(['id' => 'product suite stub 2', 'keyword_profile' => ['profile' => ['keywords', 'profile']], 'category_keywords' => ['category', 'keywords']], 'Idea', 100, 2, false)->andReturn(false); //load prod suite fails $prod_suite_repo->shouldReceive('delete')->with('product suite stub 2')->once(); $prod_suite_repo->shouldReceive('errors')->twice()->andReturn(\Mockery::self()); $prod_suite_repo->shouldReceive('get')->once()->with('sub_products_failure_product_id')->andReturn(['product suite stub 2']); $prod_suite_repo->shouldReceive('flushIndexing')->andReturn(true); $this->app->instance('Giftertipster\\Repository\\ProductSuite\\ProductSuiteRepositoryInterface', $prod_suite_repo); $save_adds = Mockery::mock('Giftertipster\\Service\\Add\\SaveAdminMultiAddsInterface'); $save_adds->shouldReceive('getFormattedAdd')->twice()->with(['admin add stub'])->andReturn(['formatted add stub']); $save_adds->shouldReceive('save')->with(1000, 1, ['admin add stub'])->andReturn(true); $save_adds->shouldReceive('save')->with(2000, 1, ['admin add stub'])->andReturn(true); $this->app->instance('Giftertipster\\Service\\Add\\SaveAdminMultiAddsInterface', $save_adds); $idea_repo = Mockery::mock('Giftertipster\\Repository\\Idea\\IdeaRepositoryInterface'); $idea_repo->shouldReceive('update')->with(100, ['is_fulfilled' => 1])->andReturn(true); $this->app->instance('Giftertipster\\Repository\\Idea\\IdeaRepositoryInterface', $idea_repo); $keyword_profile_gen = Mockery::mock('Giftertipster\\Service\\KeywordProfile\\KeywordProfileGeneratorInterface'); $keyword_profile_gen->shouldReceive('make')->with('keywords string')->andReturn(['keywords', 'profile']); $this->app->instance('Giftertipster\\Service\\KeywordProfile\\KeywordProfileGeneratorInterface', $keyword_profile_gen); $blacklisted_product_repo = Mockery::mock('Giftertipster\\Repository\\BlacklistedProduct\\BlacklistedProductRepositoryInterface'); $blacklisted_product_repo->shouldReceive('isProductSuiteBlacklisted')->with(['id' => 'product suite stub 1'])->andReturn(false); $blacklisted_product_repo->shouldReceive('isProductSuiteBlacklisted')->with(['id' => 'product suite stub 2'])->andReturn(false); $this->app->instance('Giftertipster\\Repository\\BlacklistedProduct\\BlacklistedProductRepositoryInterface', $blacklisted_product_repo); $this->call('POST', 'service-tools/load-products', ['query.keywords_profile' => 'keywords string', 'query.add_attributes' => ['admin add stub'], 'product_0-install' => 'on', 'product_1-install' => 'on']); }
public function testGetArgumentsReturnsArray() { Log::shouldReceive('info')->never(); $command = L4shell::get(); $command->setLogging(false)->setArguments(array("-a", "-l")); $this->assertInternalType('array', $command->getArguments()); }
public function testJobIncreaseValue() { $logErrorHandler = new LogErrorHandler(); Log::shouldReceive('error')->with('Error Code: 0. Message: test message')->once(); $logErrorHandler->handle(Errors::NOT_WORKING, 'test message'); }
public function testFinderCreateLogsNoticeWhenSomeSubProductVariationsAttributesAreInvalid() { Factory::create('Giftertipster\\Entity\\Eloquent\\Idea', ['user_id' => 1, 'is_fulfilled' => 0]); $suite_attributes = ['vendor' => 'amazon', 'vendor_id' => 'b000000', 'binding' => 'testbinding', 'brand' => 'testbrand', 'manufacturer' => 'test manufacturer', 'model' => 'test model', 'group' => 'test group', 'type' => 'test type', 'size' => 'testsize', 'clothing_size' => 'test clothing size', 'color' => 'testcolor', 'title' => 'test title', 'department' => 'test department', 'min_price_amount' => 4000, 'min_price_currency' => 'USD', 'min_price_formatted' => '$40.00', 'max_price_amount' => 4000, 'max_price_currency' => 'USD', 'max_price_formatted' => '$40.00', 'reviews_url' => 'reviewsurl.com', 'detail_url' => 'detailurl.com']; $suite_attributes['images'] = []; $suite_attributes['features'] = []; $suite_attributes['descriptions'] = []; $suite_attributes['sub_products'][] = ['vendor' => 'amazon', 'vendor_id' => 'b000001', 'parent_vendor_id' => 'b000000', 'binding' => 'testbinding', 'brand' => 'testbrand', 'manufacturer' => 'test manufacturer', 'model' => 'test model', 'group' => 'test group', 'type' => 'test type', 'size' => 'testsize', 'clothing_size' => 'test clothing size', 'color' => 'testcolor', 'title' => 'test title', 'condition' => 'test condition', 'department' => 'test department', 'list_price_amount' => 4000, 'list_price_currency' => 'USD', 'list_price_formatted' => '$40.00', 'price_amount' => 4000, 'price_currency' => 'USD', 'price_formatted' => '$40.00', 'availability' => 'test avail', 'availability_type' => 'test avail type', 'availability_max_hours' => 'test avail max hours', 'availability_min_hours' => 'test avail min hours', 'availability_ship' => 'test avail ship', 'availability_ss_ship' => 1, 'offer_listing_id' => 'foo1', 'images' => [], 'descriptions' => [], 'features' => []]; $suite_attributes['sub_products'][0]['variations'][] = ['type' => 'variationtype', 'value' => 'variation1']; $suite_attributes['sub_products'][0]['variations'][] = ['type' => '', 'value' => 'variation2']; $suite_attributes['keyword_profile']['profile'] = []; $suite_attributes['category_keywords'] = []; $expected_index_attributes = ['vendor' => 'amazon', 'vendor_id' => 'b000000', 'binding' => 'testbinding', 'brand' => 'testbrand', 'manufacturer' => 'test manufacturer', 'model' => 'test model', 'group' => 'test group', 'type' => 'test type', 'size' => 'testsize', 'clothing_size' => 'test clothing size', 'color' => 'testcolor', 'title' => 'test title', 'department' => 'test department', 'min_price_amount' => 4000, 'min_price_currency' => 'USD', 'min_price_formatted' => '$40.00', 'max_price_amount' => 4000, 'max_price_currency' => 'USD', 'max_price_formatted' => '$40.00', 'reviews_url' => 'reviewsurl.com', 'detail_url' => 'detailurl.com']; $expected_index_attributes['images'] = []; $expected_index_attributes['features'] = []; $expected_index_attributes['descriptions'] = []; $expected_index_attributes['sub_products'][] = ['vendor' => 'amazon', 'vendor_id' => 'b000001', 'parent_vendor_id' => 'b000000', 'binding' => 'testbinding', 'brand' => 'testbrand', 'manufacturer' => 'test manufacturer', 'model' => 'test model', 'group' => 'test group', 'type' => 'test type', 'size' => 'testsize', 'clothing_size' => 'test clothing size', 'color' => 'testcolor', 'title' => 'test title', 'condition' => 'test condition', 'department' => 'test department', 'list_price_amount' => 4000, 'list_price_currency' => 'USD', 'list_price_formatted' => '$40.00', 'price_amount' => 4000, 'price_currency' => 'USD', 'price_formatted' => '$40.00', 'availability' => 'test avail', 'availability_type' => 'test avail type', 'availability_max_hours' => 'test avail max hours', 'availability_min_hours' => 'test avail min hours', 'availability_ship' => 'test avail ship', 'availability_ss_ship' => 1, 'offer_listing_id' => 'foo1', 'images' => [], 'descriptions' => [], 'features' => []]; $expected_index_attributes['sub_products'][0]['variations'][] = ['type' => 'variationtype', 'value' => 'variation1']; $expected_index_attributes['keyword_profile']['profile'] = []; $expected_index_attributes['category_keywords'] = []; \Log::shouldReceive('notice')->once(); //mock ProductSuiteIndexer $expected_product_suite = $expected_index_attributes; $indexer = Mockery::mock('Giftertipster\\Service\\ProductSuite\\ProductSuiteIndexerInterface'); $indexer->shouldReceive('queueIndex')->with(Mockery::on(function ($product_suite) use($expected_product_suite) { if (!empty($this->arrayRecursiveDiff($expected_product_suite, $product_suite))) { return false; } return true; }), false, false)->once()->andReturn(true); $this->app->instance('Giftertipster\\Service\\ProductSuite\\ProductSuiteIndexerInterface', $indexer); $repo = $this->app->make('Giftertipster\\Repository\\ProductSuite\\EloquentProductSuiteRepository'); $response = $repo->finderCreate($suite_attributes, 'Idea', 1, 2); $errors = $repo->errors(); assertThat($response, equalTo(true)); $eloquent_product = $this->app->make('Giftertipster\\Entity\\Eloquent\\Product'); $product = $eloquent_product->find(1); $eloquent_variation = $this->app->make('Giftertipster\\Entity\\Eloquent\\Variation'); $sub_product_variation = $eloquent_variation->where('sub_product_id', '=', 1)->get()->toArray(); assertThat($errors, nullValue()); assertThat($product, notNullValue()); assertThat($sub_product_variation, arrayWithSize(1)); }
public function testUpdateLogsNoticeOnSubProductUpdateFailureDueToSomeSubProductVariations() { $update_attributes = ['vendor' => 'amazon', 'vendor_id' => 'b000000', 'binding' => 'testbinding', 'brand' => 'testbrand', 'manufacturer' => 'test manufacturer', 'model' => 'test model', 'group' => 'test group', 'type' => 'test type', 'size' => 'testsize', 'clothing_size' => 'test clothing size', 'color' => 'testcolor', 'title' => 'updated test title', 'department' => 'test department', 'min_price_amount' => 4000, 'min_price_currency' => 'USD', 'min_price_formatted' => '$40.00', 'max_price_amount' => 4000, 'max_price_currency' => 'USD', 'max_price_formatted' => '$40.00', 'reviews_url' => 'reviewsurl.com', 'detail_url' => 'detailurl.com', 'images' => [['category' => 'image1', 'swatch_url' => 'testurl.com', 'swatch_height' => '100', 'swatch_width' => '200', 'small_url' => 'testurl.com', 'small_height' => '100', 'small_width' => '200', 'thumb_url' => 'testurl.com', 'thumb_height' => '100', 'thumb_width' => '200', 'tiny_url' => 'testurl.com', 'tiny_height' => '100', 'tiny_width' => '200', 'medium_url' => 'testurl.com', 'medium_height' => '100', 'medium_width' => '200', 'large_url' => 'testurl.com', 'large_height' => '100', 'large_width' => '200']], 'features' => [['description' => 'updated description']], 'descriptions' => [['type' => 'updated type', 'value' => 'updated value']], 'sub_products' => [['vendor' => 'amazon', 'vendor_id' => 'b000001', 'parent_vendor_id' => 'b000000', 'binding' => 'testbinding', 'brand' => 'testbrand', 'manufacturer' => 'test manufacturer', 'model' => 'test model', 'group' => 'test group', 'type' => 'test type', 'size' => 'testsize', 'clothing_size' => 'test clothing size', 'color' => 'testcolor', 'title' => 'updated sub product title', 'condition' => 'test condition', 'department' => 'test department', 'list_price_amount' => 4000, 'list_price_currency' => 'USD', 'list_price_formatted' => '$40.00', 'price_amount' => 4000, 'price_currency' => 'USD', 'price_formatted' => '$40.00', 'availability' => 'test avail', 'availability_type' => 'test avail type', 'availability_max_hours' => 'test avail max hours', 'availability_min_hours' => 'test avail min hours', 'availability_ship' => 'test avail ship', 'availability_ss_ship' => 1, 'offer_listing_id' => 'foo1', 'images' => [['category' => 'updated sub product image', 'swatch_url' => 'testurl.com', 'swatch_height' => '100', 'swatch_width' => '200', 'small_url' => 'testurl.com', 'small_height' => '100', 'small_width' => '200', 'thumb_url' => 'testurl.com', 'thumb_height' => '100', 'thumb_width' => '200', 'tiny_url' => 'testurl.com', 'tiny_height' => '100', 'tiny_width' => '200', 'medium_url' => 'testurl.com', 'medium_height' => '100', 'medium_width' => '200', 'large_url' => 'testurl.com', 'large_height' => '100', 'large_width' => '200']], 'features' => [['description' => 'updated sub product feature']], 'descriptions' => [['type' => 'updated sub product description type', 'value' => 'updated sub product description value']], 'variations' => [['type' => '', 'value' => 'updated sub product variation value'], ['type' => 'updated sub product variation type', 'value' => 'updated sub product variation value']]]]]; $expected_index_attributes = ['vendor' => 'amazon', 'vendor_id' => 'b000000', 'binding' => 'testbinding', 'brand' => 'testbrand', 'manufacturer' => 'test manufacturer', 'model' => 'test model', 'group' => 'test group', 'type' => 'test type', 'size' => 'testsize', 'clothing_size' => 'test clothing size', 'color' => 'testcolor', 'title' => 'updated test title', 'department' => 'test department', 'min_price_amount' => 4000, 'min_price_currency' => 'USD', 'min_price_formatted' => '$40.00', 'max_price_amount' => 4000, 'max_price_currency' => 'USD', 'max_price_formatted' => '$40.00', 'reviews_url' => 'reviewsurl.com', 'detail_url' => 'detailurl.com', 'is_refreshed' => 1, 'images' => [['category' => 'image1', 'swatch_url' => 'testurl.com', 'swatch_height' => '100', 'swatch_width' => '200', 'small_url' => 'testurl.com', 'small_height' => '100', 'small_width' => '200', 'thumb_url' => 'testurl.com', 'thumb_height' => '100', 'thumb_width' => '200', 'tiny_url' => 'testurl.com', 'tiny_height' => '100', 'tiny_width' => '200', 'medium_url' => 'testurl.com', 'medium_height' => '100', 'medium_width' => '200', 'large_url' => 'testurl.com', 'large_height' => '100', 'large_width' => '200']], 'features' => [['description' => 'updated description']], 'descriptions' => [['type' => 'updated type', 'value' => 'updated value']], 'sub_products' => [['vendor' => 'amazon', 'vendor_id' => 'b000001', 'parent_vendor_id' => 'b000000', 'binding' => 'testbinding', 'brand' => 'testbrand', 'manufacturer' => 'test manufacturer', 'model' => 'test model', 'group' => 'test group', 'type' => 'test type', 'size' => 'testsize', 'clothing_size' => 'test clothing size', 'color' => 'testcolor', 'title' => 'updated sub product title', 'condition' => 'test condition', 'department' => 'test department', 'list_price_amount' => 4000, 'list_price_currency' => 'USD', 'list_price_formatted' => '$40.00', 'price_amount' => 4000, 'price_currency' => 'USD', 'price_formatted' => '$40.00', 'availability' => 'test avail', 'availability_type' => 'test avail type', 'availability_max_hours' => 'test avail max hours', 'availability_min_hours' => 'test avail min hours', 'availability_ship' => 'test avail ship', 'availability_ss_ship' => 1, 'offer_listing_id' => 'foo1', 'images' => [['category' => 'updated sub product image', 'swatch_url' => 'testurl.com', 'swatch_height' => '100', 'swatch_width' => '200', 'small_url' => 'testurl.com', 'small_height' => '100', 'small_width' => '200', 'thumb_url' => 'testurl.com', 'thumb_height' => '100', 'thumb_width' => '200', 'tiny_url' => 'testurl.com', 'tiny_height' => '100', 'tiny_width' => '200', 'medium_url' => 'testurl.com', 'medium_height' => '100', 'medium_width' => '200', 'large_url' => 'testurl.com', 'large_height' => '100', 'large_width' => '200']], 'features' => [['description' => 'updated sub product feature']], 'descriptions' => [['type' => 'updated sub product description type', 'value' => 'updated sub product description value']], 'variations' => [['type' => 'updated sub product variation type', 'value' => 'updated sub product variation value']]]], 'keyword_profile' => ['profile' => ['keyword1', 'keyword2']], 'category_keywords' => ['category', 'keywords']]; $data_repo = $this->dataRepoSetup(); \DB::shouldReceive('beginTransaction')->twice(); \DB::shouldReceive('commit')->twice(); \DB::shouldReceive('rollback')->never(); $add_repo_mock = \Mockery::mock('Giftertipster\\Repository\\Add\\AddRepositoryInterface'); $add_repo_mock->shouldReceive('getAdminAddCategoryKeywords')->once()->with(1)->andReturn(['category', 'keywords']); $this->app->instance('Giftertipster\\Repository\\Add\\AddRepositoryInterface', $add_repo_mock); \Log::shouldReceive('notice')->once(); //mock ProductSuiteIndexer $expected_product_suite = $expected_index_attributes; $indexer = Mockery::mock('Giftertipster\\Service\\ProductSuite\\ProductSuiteIndexerInterface'); $indexer->shouldReceive('queueIndex')->with(Mockery::on(function ($product_suite) use($expected_product_suite) { if (!empty($this->arrayRecursiveDiff($expected_product_suite, $product_suite))) { return false; } return true; }), false, false)->once()->andReturn(true); $this->app->instance('Giftertipster\\Service\\ProductSuite\\ProductSuiteIndexerInterface', $indexer); $repo = $this->app->make('Giftertipster\\Repository\\ProductSuite\\EloquentProductSuiteRepository'); $response = $repo->update(1, $update_attributes); $this->getDataRepoData(); assertThat($response, equalTo(true)); }