createMock(DatabaseManagerInterface::class); $connection = $this->createMock(ConnectionInterface::class); $grammar = new SqliteGrammar(); $builder = new Builder($db, $connection, $grammar); $values = [ ['email' => 'test@example.com', 'name' => 'Test'], ['email' => 'foo@bar.com', 'name' => 'Foo'] ]; $sql = $grammar->compileUpsert($builder->from('users'), $values, ['email'], ['name']); $expected = 'insert into "users" ("email", "name") values (?, ?), (?, ?) on conflict ("email") do update set "name" = excluded."name"'; $this->assertEquals($expected, $sql); } public function test_upsert_bindings() { $db = $this->createMock(DatabaseManagerInterface::class); $connection = $this->createMock(ConnectionInterface::class); $grammar = new SqliteGrammar(); $builder = new Builder($db, $connection, $grammar); $values = [ ['email' => 'test@example.com', 'name' => 'Test'], ['email' => 'foo@bar.com', 'name' => 'Foo'] ]; $connection->expects($this->once()) ->method('execute') ->with($this->anything(), ['test@example.com', 'Test', 'foo@bar.com', 'Foo']); $builder->from('users')->upsert($values, ['email'], ['name']); } }