/* * Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of this * software and associated documentation files (the "Software"), to deal in the Software * without restriction, including without limitation the rights to use, copy, modify, * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ package com.amazonaws.handler; import com.amazonaws.services.lambda.runtime.TestContext; import org.junit.Test; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import static org.junit.Assert.assertTrue; public class CreateOrderHandlerTest { private CreateOrderHandler sut = new CreateOrderHandler(); @Test public void handleRequest_whenCreateOrderInputStreamEmpty_puts400InOutputStream() throws IOException { ByteArrayOutputStream os = new ByteArrayOutputStream(); sut.handleRequest(new ByteArrayInputStream(new byte[0]), os, TestContext.builder().build()); assertTrue(os.toString().contains("Body was null")); assertTrue(os.toString().contains("400")); } @Test public void handleRequest_whenCreateOrderInputStreamHasNoBody_puts400InOutputStream() throws IOException { ByteArrayOutputStream os = new ByteArrayOutputStream(); String input = "{}"; sut.handleRequest(new ByteArrayInputStream(input.getBytes()), os, TestContext.builder().build()); assertTrue(os.toString().contains("Body was null")); assertTrue(os.toString().contains("400")); } @Test public void handleRequest_whenCreateOrderInputStreamHasNullBody_puts400InOutputStream() throws IOException { ByteArrayOutputStream os = new ByteArrayOutputStream(); String input = "{\"body\": \"null\"}"; sut.handleRequest(new ByteArrayInputStream(input.getBytes()), os, TestContext.builder().build()); assertTrue(os.toString().contains("Request was null")); assertTrue(os.toString().contains("400")); } @Test public void handleRequest_whenCreateOrderInputStreamHasWrongTypeForBody_puts400InOutputStream() throws IOException { ByteArrayOutputStream os = new ByteArrayOutputStream(); String input = "{\"body\": \"1\"}"; sut.handleRequest(new ByteArrayInputStream(input.getBytes()), os, TestContext.builder().build()); assertTrue(os.toString().contains("Invalid JSON")); assertTrue(os.toString().contains("400")); } @Test public void handleRequest_whenCreateOrderInputStreamHasEmptyBodyDict_puts400InOutputStream() throws IOException { ByteArrayOutputStream os = new ByteArrayOutputStream(); String input = "{\"body\": \"{}\"}"; sut.handleRequest(new ByteArrayInputStream(input.getBytes()), os, TestContext.builder().build()); assertTrue(os.toString().contains("Require customerId to create an order")); assertTrue(os.toString().contains("400")); } @Test public void handleRequest_whenCreateOrderInputStreamOnlyHasCustomer_puts400InOutputStream() throws IOException { ByteArrayOutputStream os = new ByteArrayOutputStream(); String input = "{\"body\": \"{\\\"customerId\\\": \\\"customer\\\"}\"}"; sut.handleRequest(new ByteArrayInputStream(input.getBytes()), os, TestContext.builder().build()); assertTrue(os.toString().contains("Require preTaxAmount to create an order")); assertTrue(os.toString().contains("400")); } @Test public void handleRequest_whenCreateOrderInputStreamDoesNotHavePostTaxAmount_puts400InOutputStream() throws IOException { ByteArrayOutputStream os = new ByteArrayOutputStream(); String input = "{\"body\": \"{\\\"customerId\\\": \\\"customer\\\", \\\"preTaxAmount\\\": 1}\"}"; sut.handleRequest(new ByteArrayInputStream(input.getBytes()), os, TestContext.builder().build()); assertTrue(os.toString().contains("Require postTaxAmount to create an order")); assertTrue(os.toString().contains("400")); } }