package com.salesmanager.test.shop.controller.category.rest;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter;
import com.salesmanager.shop.model.catalog.category.Category;
import com.salesmanager.shop.model.catalog.category.CategoryDescription;
import com.salesmanager.shop.model.catalog.category.PersistableCategory;
import com.salesmanager.shop.model.catalog.category.ReadableCategory;
import org.junit.Ignore;
import org.junit.Test;
import org.springframework.http.*;
import org.springframework.security.crypto.codec.Base64;
import org.springframework.web.client.RestTemplate;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
@Ignore
public class CategoryManagementAPITest {
private RestTemplate restTemplate;
private HttpHeaders getHeader(){
HttpHeaders headers = new HttpHeaders();
MediaType mediaType = new MediaType("application", "json", Charset.forName("UTF-8"));
//MediaType.APPLICATION_JSON //for application/json
headers.setContentType(mediaType);
//Basic Authentication
String authorisation = "admin" + ":" + "password";
byte[] encodedAuthorisation = Base64.encode(authorisation.getBytes());
headers.add("Authorization", "Basic " + new String(encodedAuthorisation));
return headers;
}
/**
* Read - GET a category by id
* @throws Exception
*/
@Test
@Ignore
public void getCategory() throws Exception {
restTemplate = new RestTemplate();
HttpEntity<String> httpEntity = new HttpEntity<String>(getHeader());
ResponseEntity<ReadableCategory> response = restTemplate.exchange("http://localhost:8080/sm-shop/services/public/DEFAULT/category/100?lang=en", HttpMethod.GET, httpEntity, ReadableCategory.class);
if(response.getStatusCode() != HttpStatus.OK){
throw new Exception();
}else{
System.out.println(response.getBody() + " Category record found.");
}
}
/**
* Creates - POST a category for a given store
* @throws Exception
*/
@Test
@Ignore
public void postCategory() throws Exception {
restTemplate = new RestTemplate();
PersistableCategory newCategory = new PersistableCategory();
newCategory.setCode("javascript");
newCategory.setSortOrder(1);
newCategory.setVisible(true);
Category parent = new Category();
parent.setId(4L);
newCategory.setParent(parent);
CategoryDescription description = new CategoryDescription();
description.setLanguage("en");
description.setName("Javascript");
description.setFriendlyUrl("javascript");
description.setTitle("Javascript");
List<CategoryDescription> descriptions = new ArrayList<CategoryDescription>();
descriptions.add(description);
newCategory.setDescriptions(descriptions);
ObjectWriter writer = new ObjectMapper().writer().withDefaultPrettyPrinter();
String json = writer.writeValueAsString(newCategory);
System.out.println(json);
HttpEntity<String> entity = new HttpEntity<String>(json, getHeader());
ResponseEntity response = restTemplate.postForEntity("http://localhost:8080/sm-shop/services/private/DEFAULT/category", entity, PersistableCategory.class);
PersistableCategory cat = (PersistableCategory) response.getBody();
System.out.println("New Category ID : " + cat.getId());
}
@Test
@Ignore
public void postComplexCategory() throws Exception {
restTemplate = new RestTemplate();
/** Dining room **/
PersistableCategory dining = new PersistableCategory();
dining.setCode("dining room");
dining.setSortOrder(0);
dining.setVisible(true);
CategoryDescription endescription = new CategoryDescription();
endescription.setLanguage("en");
endescription.setName("Dining room");
endescription.setFriendlyUrl("dining-room");
endescription.setTitle("Dining room");
CategoryDescription frdescription = new CategoryDescription();
frdescription.setLanguage("fr");
frdescription.setName("Salle à manger");
frdescription.setFriendlyUrl("salle-a-manger");
frdescription.setTitle("Salle à manger");
List<CategoryDescription> descriptions = new ArrayList<CategoryDescription>();
descriptions.add(endescription);
descriptions.add(frdescription);
dining.setDescriptions(descriptions);
Category diningParent = new Category();
diningParent.setCode(dining.getCode());
/** armoire **/
PersistableCategory armoire = new PersistableCategory();
armoire.setCode("armoire");
armoire.setSortOrder(1);
armoire.setVisible(true);
armoire.setParent(diningParent);
endescription = new CategoryDescription();
endescription.setLanguage("en");
endescription.setName("Armoires");
endescription.setFriendlyUrl("armoires");
endescription.setTitle("Armoires");
frdescription = new CategoryDescription();
frdescription.setLanguage("fr");
frdescription.setName("Armoire");
frdescription.setFriendlyUrl("armoires");
frdescription.setTitle("Armoires");
descriptions = new ArrayList<CategoryDescription>();
descriptions.add(endescription);
descriptions.add(frdescription);
armoire.setDescriptions(descriptions);
dining.getChildren().add(armoire);
/** benches **/
PersistableCategory bench = new PersistableCategory();
bench.setCode("bench");
bench.setSortOrder(4);
bench.setVisible(true);
bench.setParent(diningParent);
endescription = new CategoryDescription();
endescription.setLanguage("en");
endescription.setName("Benches");
endescription.setFriendlyUrl("benches");
endescription.setTitle("Benches");
frdescription = new CategoryDescription();
frdescription.setLanguage("fr");
frdescription.setName("Bancs");
frdescription.setFriendlyUrl("bancs");
frdescription.setTitle("Bancs");
descriptions = new ArrayList<CategoryDescription>();
descriptions.add(endescription);
descriptions.add(frdescription);
bench.setDescriptions(descriptions);
dining.getChildren().add(bench);
/** Living room **/
PersistableCategory living = new PersistableCategory();
living.setCode("livingroom");
living.setSortOrder(2);
living.setVisible(true);
endescription = new CategoryDescription();
endescription.setLanguage("en");
endescription.setName("Living room");
endescription.setFriendlyUrl("living-room");
endescription.setTitle("Living room");
frdescription = new CategoryDescription();
frdescription.setLanguage("fr");
frdescription.setName("Salon");
frdescription.setFriendlyUrl("salon");
frdescription.setTitle("Salon");
descriptions = new ArrayList<CategoryDescription>();
descriptions.add(endescription);
descriptions.add(frdescription);
living.setDescriptions(descriptions);
/** lounge **/
PersistableCategory lounge = new PersistableCategory();
lounge.setCode("lounge");
lounge.setSortOrder(3);
lounge.setVisible(true);
Category livingParent = (Category)living;
lounge.setParent(livingParent);
endescription = new CategoryDescription();
endescription.setLanguage("en");
endescription.setName("Lounge");
endescription.setFriendlyUrl("lounge");
endescription.setTitle("Lounge");
frdescription = new CategoryDescription();
frdescription.setLanguage("fr");
frdescription.setName("Divan");
frdescription.setFriendlyUrl("divan");
frdescription.setTitle("Divan");
descriptions = new ArrayList<CategoryDescription>();
descriptions.add(endescription);
descriptions.add(frdescription);
lounge.setDescriptions(descriptions);
living.getChildren().add(lounge);
ObjectWriter writer = new ObjectMapper().writer().withDefaultPrettyPrinter();
String json = writer.writeValueAsString(dining);
System.out.println(json);
HttpEntity<String> entity = new HttpEntity<String>(json, getHeader());
ResponseEntity response = restTemplate.postForEntity("http://localhost:8080/sm-shop/services/private/DEFAULT/category", entity, PersistableCategory.class);
PersistableCategory cat = (PersistableCategory) response.getBody();
System.out.println("New Category ID : " + cat.getId());
}
@Test
@Ignore
public void deleteCategory() throws Exception {
restTemplate = new RestTemplate();
HttpEntity<String> httpEntity = new HttpEntity<String>(getHeader());
restTemplate.exchange("http://localhost:8080/sm-shop/services/DEFAULT/category/100", HttpMethod.DELETE, httpEntity, Category.class);
System.out.println("Category id 100 Deleted.");
}
}