/*
* Copyright 2012-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file is distributed
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
package com.amazonaws.services.simpleworkflow.flow.examples.booking;
import java.util.ArrayList;
import java.util.List;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import com.amazonaws.services.simpleworkflow.flow.core.Promise;
import com.amazonaws.services.simpleworkflow.flow.junit.AsyncAssert;
import com.amazonaws.services.simpleworkflow.flow.junit.FlowBlockJUnit4ClassRunner;
import com.amazonaws.services.simpleworkflow.flow.junit.WorkflowTest;
@RunWith(FlowBlockJUnit4ClassRunner.class)
public class BookingWorklfowTest {
@Rule
public WorkflowTest workflowTest = new WorkflowTest();
List<String> trace;
private BookingWorkflowClientFactory workflowFactory = new BookingWorkflowClientFactoryImpl();
@Before
public void setUp() throws Exception {
trace = new ArrayList<String>();
// Register activity implementation to be used during test run
// In real life some mocking framework to be used
BookingActivities activities = new BookingActivities() {
@Override
public void sendConfirmationActivity(int customerId) {
trace.add("sendConfirmation-" + customerId);
}
@Override
public void reserveCar(int requestId) {
trace.add("reserveCar-" + requestId);
}
@Override
public void reserveAirline(int requestId) {
trace.add("reserveAirline-" + requestId);
}
};
workflowTest.addActivitiesImplementation(activities);
workflowTest.addWorkflowImplementationType(BookingWorkflowImpl.class);
}
@After
public void tearDown() throws Exception {
trace = null;
}
@Test
public void testReserveBoth() {
BookingWorkflowClient workflow = workflowFactory.getClient();
Promise<Void> booked = workflow.makeBooking(123, 345, true, true);
List<String> expected = new ArrayList<String>();
expected.add("reserveCar-123");
expected.add("reserveAirline-123");
expected.add("sendConfirmation-345");
AsyncAssert.assertEqualsWaitFor(expected, trace, booked);
}
@Test
public void testReserveAir() {
BookingWorkflowClient workflow = workflowFactory.getClient();
Promise<Void> booked = workflow.makeBooking(123, 345, true, false);
List<String> expected = new ArrayList<String>();
expected.add("reserveAirline-123");
expected.add("sendConfirmation-345");
AsyncAssert.assertEqualsWaitFor(expected, trace, booked);
}
@Test
public void testReserveCar() {
BookingWorkflowClient workflow = workflowFactory.getClient();
Promise<Void> booked = workflow.makeBooking(123, 345, false, true);
List<String> expected = new ArrayList<String>();
expected.add("reserveCar-123");
expected.add("sendConfirmation-345");
AsyncAssert.assertEqualsWaitFor(expected, trace, booked);
}
@Test
public void testReserveNone() {
BookingWorkflowClient workflow = workflowFactory.getClient();
Promise<Void> booked = workflow.makeBooking(123, 345, false, false);
List<String> expected = new ArrayList<String>();
expected.add("sendConfirmation-345");
AsyncAssert.assertEqualsWaitFor(expected, trace, booked);
}
}