diff --git a/app/code/Magento/SalesGraphQl/Model/Resolver/Orders.php b/app/code/Magento/SalesGraphQl/Model/Resolver/Orders.php
new file mode 100644
index 000000000000..5802115d44b5
--- /dev/null
+++ b/app/code/Magento/SalesGraphQl/Model/Resolver/Orders.php
@@ -0,0 +1,71 @@
+collectionFactory = $collectionFactory;
+ $this->checkCustomerAccount = $checkCustomerAccount;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function resolve(
+ Field $field,
+ $context,
+ ResolveInfo $info,
+ array $value = null,
+ array $args = null
+ ) {
+ $customerId = $context->getUserId();
+ $this->checkCustomerAccount->execute($customerId, $context->getUserType());
+
+ $items = [];
+ $orders = $this->collectionFactory->create($customerId);
+
+ /** @var \Magento\Sales\Model\Order $order */
+ foreach ($orders as $order) {
+ $items[] = [
+ 'id' => $order->getId(),
+ 'increment_id' => $order->getIncrementId(),
+ 'created_at' => $order->getCreatedAt(),
+ 'grand_total' => $order->getGrandTotal(),
+ 'status' => $order->getStatus(),
+ ];
+ }
+ return ['items' => $items];
+ }
+}
diff --git a/app/code/Magento/SalesGraphQl/README.md b/app/code/Magento/SalesGraphQl/README.md
new file mode 100644
index 000000000000..d5717821b164
--- /dev/null
+++ b/app/code/Magento/SalesGraphQl/README.md
@@ -0,0 +1,4 @@
+# SalesGraphQl
+
+**SalesGraphQl** provides type and resolver information for the GraphQl module
+to generate sales orders information.
diff --git a/app/code/Magento/SalesGraphQl/composer.json b/app/code/Magento/SalesGraphQl/composer.json
new file mode 100644
index 000000000000..0549d31d59a2
--- /dev/null
+++ b/app/code/Magento/SalesGraphQl/composer.json
@@ -0,0 +1,26 @@
+{
+ "name": "magento/module-sales-graph-ql",
+ "description": "N/A",
+ "type": "magento2-module",
+ "require": {
+ "php": "~7.1.3||~7.2.0",
+ "magento/framework": "*",
+ "magento/module-customer-graph-ql": "*",
+ "magento/module-sales": "*"
+ },
+ "suggest": {
+ "magento/module-graph-ql": "*"
+ },
+ "license": [
+ "OSL-3.0",
+ "AFL-3.0"
+ ],
+ "autoload": {
+ "files": [
+ "registration.php"
+ ],
+ "psr-4": {
+ "Magento\\SalesGraphQl\\": ""
+ }
+ }
+}
diff --git a/app/code/Magento/SalesGraphQl/etc/module.xml b/app/code/Magento/SalesGraphQl/etc/module.xml
new file mode 100644
index 000000000000..70a55db67a50
--- /dev/null
+++ b/app/code/Magento/SalesGraphQl/etc/module.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
diff --git a/app/code/Magento/SalesGraphQl/etc/schema.graphqls b/app/code/Magento/SalesGraphQl/etc/schema.graphqls
new file mode 100644
index 000000000000..44f106532858
--- /dev/null
+++ b/app/code/Magento/SalesGraphQl/etc/schema.graphqls
@@ -0,0 +1,18 @@
+# Copyright © Magento, Inc. All rights reserved.
+# See COPYING.txt for license details.
+
+type Query {
+ customerOrders: CustomerOrders @resolver(class: "Magento\\SalesGraphQl\\Model\\Resolver\\Orders") @doc(description: "List of customer orders")
+}
+
+type CustomerOrder @doc(description: "Order mapping fields") {
+ id: Int
+ increment_id: String
+ created_at: String
+ grand_total: Float
+ status: String
+}
+
+type CustomerOrders {
+ items: [CustomerOrder] @doc(description: "Array of orders")
+}
diff --git a/app/code/Magento/SalesGraphQl/registration.php b/app/code/Magento/SalesGraphQl/registration.php
new file mode 100644
index 000000000000..afb4091bfa32
--- /dev/null
+++ b/app/code/Magento/SalesGraphQl/registration.php
@@ -0,0 +1,10 @@
+customerTokenService = Bootstrap::getObjectManager()->get(CustomerTokenServiceInterface::class);
+ }
+
+ /**
+ * @magentoApiDataFixture Magento/Customer/_files/customer.php
+ * @magentoApiDataFixture Magento/Sales/_files/orders_with_customer.php
+ */
+ public function testOrdersQuery()
+ {
+ $query =
+ <<graphQlQuery($query, [], '', $this->getCustomerAuthHeaders($currentEmail, $currentPassword));
+
+ $expectedData = [
+ [
+ 'increment_id' => '100000002',
+ 'status' => 'processing',
+ 'grand_total' => 120.00
+ ],
+ [
+ 'increment_id' => '100000003',
+ 'status' => 'processing',
+ 'grand_total' => 130.00
+ ],
+ [
+ 'increment_id' => '100000004',
+ 'status' => 'closed',
+ 'grand_total' => 140.00
+ ],
+ [
+ 'increment_id' => '100000005',
+ 'status' => 'complete',
+ 'grand_total' => 150.00
+ ],
+ [
+ 'increment_id' => '100000006',
+ 'status' => 'complete',
+ 'grand_total' => 160.00
+ ]
+ ];
+
+ $actualData = $response['customerOrders']['items'];
+
+ foreach ($expectedData as $key => $data) {
+ $this->assertEquals($data['increment_id'], $actualData[$key]['increment_id']);
+ $this->assertEquals($data['grand_total'], $actualData[$key]['grand_total']);
+ $this->assertEquals($data['status'], $actualData[$key]['status']);
+ }
+ }
+
+ /**
+ * @param string $email
+ * @param string $password
+ * @return array
+ * @throws \Magento\Framework\Exception\AuthenticationException
+ */
+ private function getCustomerAuthHeaders(string $email, string $password): array
+ {
+ $customerToken = $this->customerTokenService->createCustomerAccessToken($email, $password);
+ return ['Authorization' => 'Bearer ' . $customerToken];
+ }
+}
diff --git a/dev/tests/integration/testsuite/Magento/Sales/_files/order_list_rollback.php b/dev/tests/integration/testsuite/Magento/Sales/_files/order_list_rollback.php
index aae4a557ba1e..6e24cee501f5 100644
--- a/dev/tests/integration/testsuite/Magento/Sales/_files/order_list_rollback.php
+++ b/dev/tests/integration/testsuite/Magento/Sales/_files/order_list_rollback.php
@@ -4,6 +4,4 @@
* See COPYING.txt for license details.
*/
-use Magento\Sales\Model\Order;
-
require 'default_rollback.php';
diff --git a/dev/tests/integration/testsuite/Magento/Sales/_files/orders_with_customer.php b/dev/tests/integration/testsuite/Magento/Sales/_files/orders_with_customer.php
new file mode 100644
index 000000000000..753adb1f3859
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Sales/_files/orders_with_customer.php
@@ -0,0 +1,102 @@
+ '100000002',
+ 'state' => \Magento\Sales\Model\Order::STATE_NEW,
+ 'status' => 'processing',
+ 'grand_total' => 120.00,
+ 'subtotal' => 120.00,
+ 'base_grand_total' => 120.00,
+ 'store_id' => 1,
+ 'website_id' => 1,
+ 'payment' => $payment
+ ],
+ [
+ 'increment_id' => '100000003',
+ 'state' => \Magento\Sales\Model\Order::STATE_PROCESSING,
+ 'status' => 'processing',
+ 'grand_total' => 130.00,
+ 'base_grand_total' => 130.00,
+ 'subtotal' => 130.00,
+ 'store_id' => 0,
+ 'website_id' => 0,
+ 'payment' => $payment
+ ],
+ [
+ 'increment_id' => '100000004',
+ 'state' => \Magento\Sales\Model\Order::STATE_PROCESSING,
+ 'status' => 'closed',
+ 'grand_total' => 140.00,
+ 'base_grand_total' => 140.00,
+ 'subtotal' => 140.00,
+ 'store_id' => 1,
+ 'website_id' => 1,
+ 'payment' => $payment
+ ],
+ [
+ 'increment_id' => '100000005',
+ 'state' => \Magento\Sales\Model\Order::STATE_COMPLETE,
+ 'status' => 'complete',
+ 'grand_total' => 150.00,
+ 'base_grand_total' => 150.00,
+ 'subtotal' => 150.00,
+ 'store_id' => 1,
+ 'website_id' => 1,
+ 'payment' => $payment
+ ],
+ [
+ 'increment_id' => '100000006',
+ 'state' => \Magento\Sales\Model\Order::STATE_COMPLETE,
+ 'status' => 'complete',
+ 'grand_total' => 160.00,
+ 'base_grand_total' => 160.00,
+ 'subtotal' => 160.00,
+ 'store_id' => 1,
+ 'website_id' => 1,
+ 'payment' => $payment
+ ],
+];
+
+/** @var OrderRepositoryInterface $orderRepository */
+$orderRepository = $objectManager->create(OrderRepositoryInterface::class);
+/** @var array $orderData */
+foreach ($orders as $orderData) {
+ /** @var $order \Magento\Sales\Model\Order */
+ $order = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
+ \Magento\Sales\Model\Order::class
+ );
+
+ // Reset addresses
+ /** @var Order\Address $billingAddress */
+ $billingAddress = $objectManager->create(OrderAddress::class, ['data' => $addressData]);
+ $billingAddress->setAddressType('billing');
+
+ $shippingAddress = clone $billingAddress;
+ $shippingAddress->setId(null)->setAddressType('shipping');
+
+ $order
+ ->setData($orderData)
+ ->addItem($orderItem)
+ ->setCustomerIsGuest(false)
+ ->setCustomerId(1)
+ ->setCustomerEmail('customer@example.com')
+ ->setBillingAddress($billingAddress)
+ ->setShippingAddress($shippingAddress);
+
+ $orderRepository->save($order);
+}
diff --git a/dev/tests/integration/testsuite/Magento/Sales/_files/orders_with_customer_rollback.php b/dev/tests/integration/testsuite/Magento/Sales/_files/orders_with_customer_rollback.php
new file mode 100644
index 000000000000..1fb4b4636ab2
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Sales/_files/orders_with_customer_rollback.php
@@ -0,0 +1,8 @@
+