import { expect } from 'chai';
import { describe, it } from 'mocha';

import { identityFunc } from '../../jsutils/identityFunc.js';

import { parse } from '../../language/parser.js';

import { GraphQLSchema } from '../../type/schema.js';

import { TypeInfo } from '../../utilities/TypeInfo.js';

import {
  ASTValidationContext,
  SDLValidationContext,
  ValidationContext,
} from '../ValidationContext.js';

describe('ValidationContext', () => {
  it('can be Object.toStringified', () => {
    const schema = new GraphQLSchema({});
    const typeInfo = new TypeInfo(schema);
    const ast = parse('{ foo }');
    const onError = identityFunc;

    const astContext = new ASTValidationContext(ast, onError);
    expect(Object.prototype.toString.call(astContext)).to.equal(
      '[object ASTValidationContext]',
    );

    const sdlContext = new SDLValidationContext(ast, schema, onError);
    expect(Object.prototype.toString.call(sdlContext)).to.equal(
      '[object SDLValidationContext]',
    );

    const context = new ValidationContext(schema, ast, typeInfo, onError);
    expect(Object.prototype.toString.call(context)).to.equal(
      '[object ValidationContext]',
    );
  });
});