/home/desid573/public_html/gcdriver/square/test/Api
Edit: /home/desid573/public_html/gcdriver/square/test/Api/CatalogApiTest.php (23072B)
"CATEGORY",
"id" => self::BEVERAGES_CLIENT_ID,
"category_data" => [
"name" => "Beverages"
]
];
private $milks = [
"type" => "MODIFIER_LIST",
"id" => self::MILKS_CLIENT_ID,
"modifier_list_data" => [
"name" => "Milks",
"modifiers" => [
[
"type" => "MODIFIER",
"id" => "#WholeMilk",
"modifier_data" => [
"name" => "Whole Milk"]],
[
"type" => 'MODIFIER',
"id" => "#SkimMilk",
"modifier_data" => [
"name" => "Skim Milk"]],
[
"type" => "MODIFIER",
"id" => "#SoyMilk",
"modifier_data" => [
"name" => "SoyMilk",
"price_money" => [
"amount" => 50.0,
"currency" => "USD"
]
]
]
]
]
];
private $syrups = [
"type" => "MODIFIER_LIST",
"id" => "#Syrups",
"modifier_list_data" => [
"name" => "Syrups",
"modifiers" => [
[
"type" => "MODIFIER",
"id" => "#Hazelnut",
"modifier_data" => [
"name" => "Hazelnut"
]
],
[
"type" => "MODIFIER",
"id" => "#Vanilla",
"modifier_data" => [
"name" => "Vanilla"
]
],
[
"type" => "MODIFIER",
"id" => "#Chocolate",
"modifier_data" => [
"name" => "Chocolate"
]
]
]
]
];
private $coffee = [
"type" => "ITEM",
"id" => self::COFFEE_CLIENT_ID,
"item_data" => [
"name" => "Coffee",
"description" => "Hot bean juice",
"abbreviation" => "Co",
"category_id" => self::BEVERAGES_CLIENT_ID,
"modifier_list_info" => [["modifier_list_id" => self::MILKS_CLIENT_ID]],
"tax_ids" => [self::SALES_TAX_CLIENT_ID],
"variations" => [
[
"type" => "ITEM_VARIATION",
"id" => self::SMALL_COFFEE_CLIENT_ID,
"item_variation_data" => [
"name" => "Small",
"item_id" => self::COFFEE_CLIENT_ID,
"pricing_type" => "FIXED_PRICING",
"price_money" => [
"amount" => 195.0,
"currency" => "USD"
]
]
],
[
"type" => "ITEM_VARIATION",
"id" => self::LARGE_COFFEE_CLIENT_ID,
"item_variation_data" => [
"name" => "Large",
"item_id" => self::COFFEE_CLIENT_ID,
"pricing_type" => "FIXED_PRICING",
"price_money" => [
"amount" => 255.0,
"currency" => "USD"
]
]
]
]
]
];
private $tea = [
"type" => "ITEM",
"id" => "#Tea",
"item_data" => [
"name" => "Tea",
"description" => "Hot leaf juice",
"abbreviation" => "Te",
"category_id" => self::BEVERAGES_CLIENT_ID,
"modifier_list_info" => [["modifier_list_id" => self::MILKS_CLIENT_ID]],
"tax_ids" => [self::SALES_TAX_CLIENT_ID],
"variations" => [
[
"type" => "ITEM_VARIATION",
"id" => self::SMALL_TEA_CLIENT_ID,
"item_variation_data" => [
"name" => "Small",
"item_id" => "#Tea",
"pricing_type" => "FIXED_PRICING",
"price_money" => [
"amount" => 150.0,
"currency" => "USD"
]
]
],
[
"type" => "ITEM_VARIATION",
"id" => "#LargeTea",
"item_variation_data" => [
"name" => "Large",
"item_id" => "#Tea",
"pricing_type" => "FIXED_PRICING",
"price_money" => [
"amount" => 200.0,
"currency" => "USD"
]
]
]
]
]
];
private $sales_tax = [
"type" => "TAX",
"id" => '#SalesTax',
"present_at_all_locations" => true,
"tax_data" => [
"name" => "Sales Tax",
"calculation_phase" => "TAX_SUBTOTAL_PHASE",
"inclusion_type" => "ADDITIVE",
"percentage" => '5.0',
"applies_to_custom_amounts" => true,
"enabled" => true
]
];
/**
* Setup before running each test case
*/
public static function setUpBeforeClass() {
self::$api = new \SquareConnect\Api\CatalogApi();
self::$test_accounts = new \SquareConnect\TestAccounts();
// Configure OAuth2 access token for authorization: oauth2
$account = self::$test_accounts->{'US-Prod'};
$access_token = $account->{'access_token'};
Configuration::getDefaultConfiguration()->setAccessToken($access_token);
}
protected function setUp() {
$this->objects = [$this->beverages, $this->milks, $this->syrups, $this->coffee, $this->tea, $this->sales_tax];
$this->idMap = [];
$this->buildTestCatalog();
}
protected function tearDown() {
$this->deleteTestCatalog();
}
protected function buildTestCatalog() {
$body = new \SquareConnect\Model\BatchUpsertCatalogObjectsRequest([
"idempotency_key" => uniqid(),
"batches" => [
[
"objects" => $this->objects
]
]
]);
$response = self::$api->batchUpsertCatalogObjects($body);
foreach($response->getIdMappings() as $mapping) {
$this->idMap[$mapping->getClientObjectId()] = $mapping->getObjectId();
}
}
protected function deleteTestCatalog() {
$objectIds = [];
$cursor = "";
do {
$response = self::$api->listCatalog($cursor, null);
$cursor = $response->getCursor();
foreach($response->getObjects() as $object) {
array_push($objectIds, $object->getId());
}
} while (!empty($cursor));
while(!empty($objectIds)) {
$toRemove = array_splice($objectIds, 0, 200);
$request = new \SquareConnect\Model\BatchDeleteCatalogObjectsRequest([
"object_ids" => $toRemove
]);
self::$api->batchDeleteCatalogObjects($request);
}
}
/**
* Test case for batchDeleteCatalogObjects
*
* BatchDeleteCatalogObjects
*
*/
public function test_batchDeleteCatalogObjects() {
$coffeeId = $this->idMap[self::COFFEE_CLIENT_ID];
$smallCoffeeId = $this->idMap[self::SMALL_COFFEE_CLIENT_ID];
$largeCoffeeId = $this->idMap[self::LARGE_COFFEE_CLIENT_ID];
$smallTeaId = $this->idMap[self::SMALL_TEA_CLIENT_ID];
$request = new \SquareConnect\Model\BatchDeleteCatalogObjectsRequest([
"object_ids" => [$coffeeId, $smallTeaId]
]);
$response = self::$api->batchDeleteCatalogObjects($request);
$this->assertCount(4, $response->getDeletedObjectIds());
$this->assertContains($coffeeId, $response->getDeletedObjectIds());
$this->assertContains($smallCoffeeId, $response->getDeletedObjectIds());
$this->assertContains($largeCoffeeId, $response->getDeletedObjectIds());
$this->assertContains($smallTeaId, $response->getDeletedObjectIds());
}
/**
* Test case for batchRetrieveCatalogObjects
*
* BatchRetrieveCatalogObjects
*
*/
public function test_batchRetrieveCatalogObjects() {
$coffeeId = $this->idMap[self::COFFEE_CLIENT_ID];
$salesTaxId = $this->idMap[self::SALES_TAX_CLIENT_ID];
$beveragesId = $this->idMap[self::BEVERAGES_CLIENT_ID];
$milksId = $this->idMap[self::MILKS_CLIENT_ID];
$request = new \SquareConnect\Model\BatchRetrieveCatalogObjectsRequest([
"object_ids" => [$coffeeId, $salesTaxId]
]);
$response = self::$api->batchRetrieveCatalogObjects($request);
$this->assertCount(2, $response->getObjects());
$coffee = $response->getObjects()[0];
$this->assertEquals("ITEM", $coffee->getType());
$this->assertEquals($coffeeId, $coffee->getId());
$this->assertNotEmpty($coffee->getUpdatedAt());
$this->assertTrue($coffee->getVersion() != 0);
$this->assertFalse($coffee->getIsDeleted());
$this->assertEmpty($coffee->getCatalogV1Ids());
$this->assertEmpty($coffee->getPresentAtLocationIds());
$this->assertEmpty($coffee->getAbsentAtLocationIds());
$this->assertEquals("Coffee", $coffee->getItemData()->getName());
$this->assertEquals("Hot bean juice", $coffee->getItemData()->getDescription());
$this->assertEquals("Co", $coffee->getItemData()->getAbbreviation());
$this->assertNull($coffee->getItemData()->getLabelColor());
$this->assertNull($coffee->getItemData()->getAvailableOnline());
$this->assertNull($coffee->getItemData()->getAvailableForPickup());
$this->assertNull($coffee->getItemData()->getAvailableElectronically());
$this->assertEquals($beveragesId, $coffee->getItemData()->getCategoryId());
$this->assertCount(1, $coffee->getItemData()->getTaxIds());
$this->assertEquals($salesTaxId, $coffee->getItemData()->getTaxIds()[0]);
$this->assertCount(1, $coffee->getItemData()->getModifierListInfo());
$this->assertEquals($milksId, $coffee->getItemData()->getModifierListInfo()[0]->getModifierListId());
$this->assertEmpty($coffee->getItemData()->getModifierListInfo()[0]->getModifierOverrides());
$this->assertNull($coffee->getItemData()->getModifierListInfo()[0]->getMinSelectedModifiers());
$this->assertNull($coffee->getItemData()->getModifierListInfo()[0]->getMaxSelectedModifiers());
$this->assertNull($coffee->getItemData()->getModifierListInfo()[0]->getEnabled());
$this->assertCount(2, $coffee->getItemData()->getVariations());
$this->assertEquals("Small", $coffee->getItemData()->getVariations()[0]->getItemVariationData()->getName());
$this->assertEquals("FIXED_PRICING", $coffee->getItemData()->getVariations()[0]->getItemVariationData()->getPricingType());
$this->assertEquals(195.0, $coffee->getItemData()->getVariations()[0]->getItemVariationData()->getPriceMoney()->getAmount());
$this->assertEquals("USD", $coffee->getItemData()->getVariations()[0]->getItemVariationData()->getPriceMoney()->getCurrency());
$this->assertEquals("Large", $coffee->getItemData()->getVariations()[1]->getItemVariationData()->getName());
$this->assertEquals("FIXED_PRICING", $coffee->getItemData()->getVariations()[1]->getItemVariationData()->getPricingType());
$this->assertEquals(255.0, $coffee->getItemData()->getVariations()[1]->getItemVariationData()->getPriceMoney()->getAmount());
$this->assertEquals("USD", $coffee->getItemData()->getVariations()[1]->getItemVariationData()->getPriceMoney()->getCurrency());
$this->assertNull($coffee->getCategoryData());
$this->assertNull($coffee->getItemVariationData());
$this->assertNull($coffee->getTaxData());
$this->assertNull($coffee->getDiscountData());
$this->assertNull($coffee->getModifierListData());
$this->assertNull($coffee->getModifierData());
$salesTax = $response->getObjects()[1];
$this->assertEquals("TAX", $salesTax->getType());
$this->assertEquals($salesTaxId, $salesTax->getId());
$this->assertEquals("Sales Tax", $salesTax->getTaxData()->getName());
}
/**
* Test case for batchUpsertCatalogObjects
*
* BatchUpsertCatalogObjects
*
*/
public function test_batchUpsertCatalogObjects() {
$batches = [];
$numObjects = 0;
// TODO s/$batchNum < 1/$batchNum < 3/
for ($batchNum = 0; $batchNum < 1; $batchNum++) {
$batch = [];
for($i = 0; $i < 100; $i++) {
$itemId = sprintf("Item-%d-%d", $batchNum, $i);
$variationId = sprintf("#ItemVariation-%d-%d", $batchNum, $i);
array_push($batch, new \SquareConnect\Model\CatalogObject([
"type" => "ITEM",
"id" => "#" . $itemId,
"item_data" => [
"name" => $itemId,
"variations" => [
[
"type" => "ITEM_VARIATION",
"id" => $variationId,
"item_variation_data" => [
"name" => "Regular",
"item_id" => "#" . $itemId,
"pricing_type" => "VARIABLE_PRICING"
]
]
]
]
]));
$numObjects++;
}
array_push($batches, ["objects" => $batch]);
}
$request = new \SquareConnect\Model\BatchUpsertCatalogObjectsRequest([
"idempotency_key" => uniqid(),
"batches" => $batches
]);
$response = self::$api->batchUpsertCatalogObjects($request);
$this->assertCount($numObjects, $response->getObjects());
}
/**
* Test case for catalogInfo
*
* CatalogInfo
*
*/
public function test_catalogInfo() {
$response = self::$api->catalogInfo();
$this->assertEquals(1000, $response->getLimits()->getBatchUpsertMaxObjectsPerBatch());
$this->assertEquals(10000, $response->getLimits()->getBatchUpsertMaxTotalObjects());
$this->assertEquals(1000, $response->getLimits()->getBatchRetrieveMaxObjectIds());
$this->assertEquals(1000, $response->getLimits()->getSearchMaxPageLimit());
$this->assertEquals(200, $response->getLimits()->getBatchDeleteMaxObjectIds());
$this->assertEquals(1000, $response->getLimits()->getUpdateItemTaxesMaxItemIds());
$this->assertEquals(1000, $response->getLimits()->getUpdateItemTaxesMaxTaxesToEnable());
$this->assertEquals(1000, $response->getLimits()->getUpdateItemTaxesMaxTaxesToDisable());
$this->assertEquals(1000, $response->getLimits()->getUpdateItemModifierListsMaxItemIds());
$this->assertEquals(1000, $response->getLimits()->getUpdateItemModifierListsMaxModifierListsToEnable());
$this->assertEquals(1000, $response->getLimits()->getUpdateItemModifierListsMaxModifierListsToDisable());
}
/**
* Test case for deleteCatalogObject
*
* DeleteCatalogObject
*
*/
public function test_deleteCatalogObject() {
$coffeeId = $this->idMap[self::COFFEE_CLIENT_ID];
$smallCoffeeId = $this->idMap[self::SMALL_COFFEE_CLIENT_ID];
$largeCoffeeId = $this->idMap[self::LARGE_COFFEE_CLIENT_ID];
$response = self::$api->deleteCatalogObject($coffeeId);
$this->assertCount(3, $response->getDeletedObjectIds());
$this->assertContains($coffeeId, $response->getDeletedObjectIds());
$this->assertContains($smallCoffeeId, $response->getDeletedObjectIds());
$this->assertContains($largeCoffeeId, $response->getDeletedObjectIds());
}
/**
* Test case for listCatalog
*
* ListCatalog
*
*/
public function test_listCatalog() {
$objects = [];
$cursor = "";
do {
$response = self::$api->listCatalog($cursor, null);
$cursor = $response->getCursor();
$objects = array_merge($objects, $response->getObjects());
} while (!empty($cursor));
$this->assertCount(count($this->objects), $objects);
}
/**
* Test case for retrieveCatalogObject
*
* RetrieveCatalogObject
*
*/
public function test_retrieveCatalogObject() {
$coffeeId = $this->idMap[self::COFFEE_CLIENT_ID];
$response = self::$api->retrieveCatalogObject($coffeeId, true);
$this->assertEmpty($response->getErrors());
$this->assertEquals($coffeeId, $response->getObject()->getId());
$this->assertCount(3, $response->getRelatedObjects());
$gotMilks = false;
$gotSalesTax = false;
$gotBeverages = false;
$this->assertNotEmpty(array_filter($response->getRelatedObjects(), function($object) {
return $object->getType() == "MODIFIER_LIST" &&
$object->getModifierListData()->getName() == "Milks";
}));
$this->assertNotEmpty(array_filter($response->getRelatedObjects(), function($object) {
return $object->getType() == "CATEGORY" &&
$object->getCategoryData()->getName() == "Beverages";
}));
$this->assertNotEmpty(array_filter($response->getRelatedObjects(), function($object) {
return $object->getType() == "TAX" &&
$object->getTaxData()->getName() == "Sales Tax";
}));
}
/**
* Test case for searchCatalogObjects
*
* SearchCatalogObjects
*
*/
public function test_searchCatalogObjectsWithPrefixQuery() {
$query = new \SquareConnect\Model\SearchCatalogObjectsRequest([
"query" => [
"prefix_query" => [
"attribute_name" => "name",
"attribute_prefix" => "Sm"
]
],
"include_deleted_objects" => false,
"include_related_objects" => false,
]);
$response = self::$api->searchCatalogObjects($query);
$this->assertCount(2, $response->getObjects());
$this->assertEquals("ITEM_VARIATION", $response->getObjects()[0]->getType());
$this->assertEquals("Small", $response->getObjects()[0]->getItemVariationData()->getName());
$this->assertEquals("ITEM_VARIATION", $response->getObjects()[1]->getType());
$this->assertEquals("Small", $response->getObjects()[1]->getItemVariationData()->getName());
}
/**
* Test case for searchCatalogObjects
*
* SearchCatalogObjects
*
*/
public function test_searchCatalogObjectsWithTaxQuery() {
$query = new \SquareConnect\Model\SearchCatalogObjectsRequest([
"query" => [
"items_for_tax_query" => [
"tax_ids" => [
$this->idMap[self::SALES_TAX_CLIENT_ID]
]
]
],
"include_deleted_objects" => false,
"include_related_objects" => false,
]);
$response = self::$api->searchCatalogObjects($query);
$this->assertCount(2, $response->getObjects());
$this->assertEquals("ITEM", $response->getObjects()[0]->getType());
$this->assertEquals("ITEM", $response->getObjects()[1]->getType());
$this->assertNotEmpty(array_filter($response->getObjects(), function($object) {
return
$object->getItemData()->getName() == "Coffee";
}));
$this->assertNotEmpty(array_filter($response->getObjects(), function($object) {
return
$object->getItemData()->getName() == "Tea";
}));
}
/**
* Test case for updateItemModifierLists
*
* UpdateItemModifierLists
*
*/
public function test_updateItemModifierLists() {
$coffeeId = $this->idMap[self::COFFEE_CLIENT_ID];
$milksId = $this->idMap[self::MILKS_CLIENT_ID];
$syrupsId = $this->idMap["#Syrups"];
$beforeUpdate = self::$api->retrieveCatalogObject($coffeeId, false);
$this->assertCount(1, $beforeUpdate->getObject()->getItemData()->getModifierListInfo());
$this->assertEquals($milksId,
$beforeUpdate->getObject()->getItemData()->getModifierListInfo()[0]->getModifierListId());
$request = new \SquareConnect\Model\UpdateItemModifierListsRequest([
"item_ids" => [$coffeeId],
"modifier_lists_to_enable" => [$syrupsId],
"modifier_lists_to_disable" => [$milksId],
]);
$response = self::$api->updateItemModifierLists($request);
$afterUpdate = self::$api->retrieveCatalogObject($coffeeId, false);
// TODO: uncomment this soon
// $this->assertCount(1, $afterUpdate->getObject()->getItemData()->getModifierListInfo());
// $this->assertEquals($syrupsId,
// $afterUpdate->getObject()->getItemData()->getModifierListInfo()[0]->getModifierListId());
}
/**
* Test case for updateItemTaxes
*
* UpdateItemTaxes
*
*/
public function test_updateItemTaxes() {
$coffeeId = $this->idMap[self::COFFEE_CLIENT_ID];
$salesTaxId = $this->idMap[self::SALES_TAX_CLIENT_ID];
$beforeUpdate = self::$api->retrieveCatalogObject($coffeeId, false);
$this->assertCount(1, $beforeUpdate->getObject()->getItemData()->getTaxIds());
$request = new \SquareConnect\Model\UpdateItemTaxesRequest([
"item_ids" => [$coffeeId],
"taxes_to_disable" => [$salesTaxId]
]);
self::$api->updateItemTaxes($request);
$afterUpdate = self::$api->retrieveCatalogObject($coffeeId, false);
$this->assertEmpty($afterUpdate->getObject()->getItemData()->getTaxIds());
}
/**
* Test case for upsertCatalogObject
*
* UpsertCatalogObject
*
*/
public function test_upsertCatalogObject() {
$request = new \SquareConnect\Model\UpsertCatalogObjectRequest([
"idempotency_key" => uniqid(),
"object" => [
"type" => "DISCOUNT",
"id" => "#Discount",
"discount_data" => [
"name" => "Half off",
"percentage" => "50.0"
]
]
]);
$response = self::$api->upsertCatalogObject($request);
$this->assertEquals("Half off", $response->getCatalogObject()->getDiscountData()->getName());
$this->assertNotNull($response->getCatalogObject()->getId());
$this->assertNotNull($response->getCatalogObject()->getUpdatedAt());
$this->assertNotNull($response->getCatalogObject()->getVersion());
$this->assertFalse($response->getCatalogObject()->getIsDeleted());
$this->assertCount(1, $response->getIdMappings());
$this->assertEquals("#Discount", $response->getIdMappings()[0]->getClientObjectId());
}
}