it('returns true for `RelayModernEnvironment` instances', () => {
   const source = new RelayInMemoryRecordSource();
   const store = new RelayMarkSweepStore(source);
   const fetch = jest.fn();
   const environment = new RelayModernEnvironment({fetch, store});
   expect(isRelayModernEnvironment(environment)).toBe(true);
 });
/**
 * Higher-level helper function to execute a mutation against a specific
 * environment.
 */
function applyRelayModernOptimisticMutation(
  environment: Environment,
  config: OptimisticMutationConfig,
): Disposable {
  invariant(
    isRelayModernEnvironment(environment),
    'commitRelayModernMutation: expect `environment` to be an instance of ' +
      '`RelayModernEnvironment`.',
  );
  const {createOperationSelector, getRequest} = environment.unstable_internal;
  const mutation = getRequest(config.mutation);
  if (mutation.operationKind !== 'mutation') {
    throw new Error('commitRelayModernMutation: Expected mutation operation');
  }
  let {optimisticUpdater} = config;
  const {configs, optimisticResponse, variables} = config;
  const operation = createOperationSelector(mutation, variables);
  if (configs) {
    ({optimisticUpdater} = RelayDeclarativeMutationConfig.convert(
      configs,
      mutation,
      optimisticUpdater,
    ));
  }

  return environment.applyUpdate({
    operation,
    selectorStoreUpdater: optimisticUpdater,
    response: optimisticResponse,
  });
}
 it('returns false for objects that do not conform to the interface', () => {
   const fakeEnvironment = {
     applyUpdate: null,
     commitPayload: null,
     getStore: null,
   };
   expect(isRelayModernEnvironment(fakeEnvironment)).toBe(false);
 });
 it('returns false for plain objects that conform to the interface', () => {
   const environment = {
     applyUpdate: jest.fn(),
     commitPayload: jest.fn(),
     getStore: jest.fn(),
     lookup: jest.fn(),
     retain: jest.fn(),
     execute: jest.fn(),
     executeMutation: jest.fn(),
   };
   expect(isRelayModernEnvironment(environment)).toBe(false);
 });
 it('returns false for non-objects', () => {
   expect(isRelayModernEnvironment(null)).toBe(false);
   expect(isRelayModernEnvironment(false)).toBe(false);
   expect(isRelayModernEnvironment('relay')).toBe(false);
   expect(isRelayModernEnvironment(1)).toBe(false);
 });
 it('returns false for classic RelayEnvironment instances', () => {
   const environment = new RelayEnvironment();
   expect(isRelayModernEnvironment(environment)).toBe(false);
 });