Added code to support Order-based Booking Server
diff --git a/README.md b/README.md
index 76bbbeb..c3814f6 100644
--- a/README.md
+++ b/README.md
@@ -48,13 +48,14 @@
 [Booking test utility](https://maps-booking.googlesource.com/maps-booking-v3/).
 To install it, follow the provided installation instructions in its README page.
 
-For the tests, you need to create a text file to store your credentials.
-Put your username and password there in one line, e.g. cred.txt file:
+For the tests, you need to create a text file to store your credentials. Put
+your username and password there in one line, e.g. cred.txt file:
 
-username:password
+      username:password
 
 You also need an availability feed for your test merchants. In our sample
-commands below, we saved it as avail.json filename.
+commands below, we saved it with the filename avail.json. For Order-based test
+client, you also need a services feed.
 
 Now, you can test your Booking Server with these commands:
 
@@ -70,6 +71,11 @@
 
         bin/bookingClient -server_addr="localhost:8080" -booking_test=true -availability_feed="./avail.json" -credentials_file="./cred.txt"
 
-As you are working on implementing your own Booking Server, you may need to
-run additional tests against it (e.g. list_bookings_test, rescheduling_test,
-etc) with the goal of eventually passing all tests (-all_tests=true).
+*   Test calls to CheckOrderFulfillability and CreateOrder methods for
+    Order-based Booking Server:
+
+        bin/orderClient -server_addr="localhost:8080" -check_order_test=true -create_order_test=true -output_dir="/tmp" -availability_feed="./availability.json" -service_feed="./services.json" -credentials_file="./cred.txt"
+
+As you are working on implementing your own Booking Server, you may need to run
+additional tests against it (e.g. list_bookings_test, rescheduling_test, etc)
+with the goal of eventually passing all tests (-all_tests=true).
diff --git a/apiv3methods.js b/apiv3methods.js
index 9c96027..f135f4d 100644
--- a/apiv3methods.js
+++ b/apiv3methods.js
@@ -152,14 +152,93 @@
   // TO-DO: add code to fetch all bookings for the user_id
   // ...
   // ListBookingsResponse
-  var resp = {bookings: {}};
+  var resp = {bookings: [{}]};
   const responseBody = JSON.stringify(resp);
   return responseBody;
 }
 
+
+/**
+ * CheckOrderFulfillability method (Order-based Booking Server only)
+ * https://developers.google.com/maps-booking/reference/rest-api-v3/checkorderfulfillability-method
+ * @param {string} requestBody - HTTP request body
+ * @return {string} HTTP response body
+ */
+function CheckOrderFulfillability(requestBody) {
+  // CheckOrderFulfillabilityRequest
+  const req = JSON.parse(requestBody);
+  // TO-DO: validate req, e.g. (req.merchant_id !== null)
+  // TO-DO: add code to validate individual items and calculate the total price
+  // ...
+  // CheckOrderFulfillabilityResponse
+  var resp = {
+    fulfillability: {
+      result: 'CAN_FULFILL',
+      item_fulfillability: [{}]  // individual item fullfilability
+    },
+    fees_and_taxes: {
+      price_micros: 1000000,  // total price in micros, e.g. 1USD = 1000000
+      currency_code: 'USD'
+    }
+  };
+  const responseBody = JSON.stringify(resp);
+  return responseBody;
+}
+
+/**
+ * CreateOrder method (Order-based Booking Server only)
+ * https://developers.google.com/maps-booking/reference/rest-api-v3/createorder-method
+ * @param {string} requestBody - HTTP request body
+ * @return {string} HTTP response body
+ */
+function CreateOrder(requestBody) {
+  // CreateOrderRequest
+  const req = JSON.parse(requestBody);
+  // TO-DO: validate req, e.g. (req.user_information !== null)
+  // TO-DO: check for req.idempotency_token uniqueness
+  // TO-DO: create and process the order
+  // ...
+  // CreateOrderResponse
+  var resp = {
+    order: {
+      order_id: '123',  // new order id
+      merchant_id: req.order.mercant_id,
+      item: [{}]  // populate individual LineItems, etc.
+    }
+  };
+  const responseBody = JSON.stringify(resp);
+  return responseBody;
+}
+
+/**
+ * ListOrders method (Order-based Booking Server only)
+ * https://developers.google.com/maps-booking/reference/rest-api-v3/listorders-method
+ * @param {string} requestBody - HTTP request body
+ * @return {string} HTTP response body
+ */
+function ListOrders(requestBody) {
+  // ListOrdersRequest
+  const req = JSON.parse(requestBody);
+  // TO-DO: validate req, e.g. if ("user_id" in req || "order_ids" in req)
+  // TO-DO: fetch orders for req.user_id or a list of req.order_ids
+  // ...
+  // ListOrdersResponse
+  var resp = {
+    order: [{}]  // populate all orders for the user_id or order_ids
+  };
+  const responseBody = JSON.stringify(resp);
+  return responseBody;
+}
+
+
 module.exports.HealthCheck = HealthCheck;
+// Booking-flow Booking Server methods
 module.exports.CheckAvailability = CheckAvailability;
 module.exports.CreateBooking = CreateBooking;
 module.exports.UpdateBooking = UpdateBooking;
 module.exports.GetBookingStatus = GetBookingStatus;
 module.exports.ListBookings = ListBookings;
+// Order-based Booking Server methods
+module.exports.CheckOrderFulfillability = CheckOrderFulfillability;
+module.exports.CreateOrder = CreateOrder;
+module.exports.ListOrders = ListOrders;
diff --git a/bookingserver.js b/bookingserver.js
index 849a6de..51d2f42 100644
--- a/bookingserver.js
+++ b/bookingserver.js
@@ -166,6 +166,39 @@
                 console.log(`Error: ${e}`);
               }
               break;
+            // POST /v3/CheckOrderFulfillability/
+            // (this method is only for Order-based Booking Server)
+            case '/v3/checkorderfulfillability':
+              try {
+                responseBody = apiv3.CheckOrderFulfillability(requestBody);
+              } catch (e) {
+                // TO-DO: add a specific error handling if necessary
+                httpCode = 500;  // Internal Server Error
+                console.log(`Error: ${e}`);
+              }
+              break;
+            // POST /v3/CreateOrder/
+            // (this method is only for Order-based Booking Server)
+            case '/v3/createorder':
+              try {
+                responseBody = apiv3.CreateOrder(requestBody);
+              } catch (e) {
+                // TO-DO: add a specific error handling if necessary
+                httpCode = 500;  // Internal Server Error
+                console.log(`Error: ${e}`);
+              }
+              break;
+            // POST /v3/ListOrders/
+            // (this method is only for Order-based Booking Server)
+            case '/v3/listorders':
+              try {
+                responseBody = apiv3.ListOrders(requestBody);
+              } catch (e) {
+                // TO-DO: add a specific error handling if necessary
+                httpCode = 500;  // Internal Server Error
+                console.log(`Error: ${e}`);
+              }
+              break;
             // some unknown request
             default:
               httpCode = 400;  // Bad Request