Home Reference Source Repository

src/traversal/__tests__/flattenSplitRelayQueries-test.js

/**
 * Copyright (c) 2013-present, Facebook, Inc.
 * All rights reserved.
 *
 * This source code is licensed under the BSD-style license found in the
 * LICENSE file in the root directory of this source tree. An additional grant
 * of patent rights can be found in the PATENTS file in the same directory.
 *
 * @emails oncall+relay
 */

'use strict';

require('configureForRelayOSS');

const Relay = require('Relay');
const RelayTestUtils = require('RelayTestUtils');

const flattenSplitRelayQueries = require('flattenSplitRelayQueries');

describe('flattenSplitRelayQueries', () => {
  function getQuery() {
    return RelayTestUtils.getNode(Relay.QL`query{node(id:"4"){id}}`);
  }

  it('returns an empty array when there are no queries', () => {
    const split = {
      required: null,
      deferred: [],
    };
    expect(flattenSplitRelayQueries(split)).toEqual([]);
  });

  it('returns a single required query', () => {
    const split = {
      required: getQuery(),
      deferred: [],
    };
    expect(flattenSplitRelayQueries(split)).toEqual([split.required]);
  });

  it('returns a single deferred query', () => {
    const split = {
      required: null,
      deferred: [{
        required: getQuery(),
        deferred: [],
      }],
    };
    expect(flattenSplitRelayQueries(split))
      .toEqual([split.deferred[0].required]);
  });

  it('returns required then deferred queries', () => {
    const split = {
      required: getQuery(),
      deferred: [
        {
          required: getQuery(),
          deferred: [],
        },
        {
          required: getQuery(),
          deferred: [],
        },
      ],
    };
    expect(flattenSplitRelayQueries(split))
      .toEqual([
        split.required,
        split.deferred[0].required,
        split.deferred[1].required,
      ]);
  });

  it('handles nested deferreds', () => {
    const split = {
      required: getQuery(),
      deferred: [
        {
          required: getQuery(),
          deferred: [{
            required: getQuery(),
            deferred: [],
          }],
        },
      ],
    };
    expect(flattenSplitRelayQueries(split))
      .toEqual([
        split.required,
        split.deferred[0].required,
        split.deferred[0].deferred[0].required,
      ]);
  });
});