import {
  assert,
  describe,
  test,
  clearStore,
  beforeAll,
  afterAll,
} from 'matchstick-as/assembly/index';
import { Address, BigInt } from '@graphprotocol/graph-ts';
import { Approval } from '../generated/schema';
import { Approval as ApprovalEvent } from '../generated/FleekNFA/FleekNFA';
import { handleApproval } from '../src/fleek-nfa';
import { createApprovalEvent } from './fleek-nfa-utils';

// Tests structure (matchstick-as >=0.5.0)
// https://thegraph.com/docs/en/developer/matchstick/#tests-structure-0-5-0

describe('Describe entity assertions', () => {
  beforeAll(() => {
    let owner = Address.fromString(
      '0x0000000000000000000000000000000000000001'
    );
    let approved = Address.fromString(
      '0x0000000000000000000000000000000000000001'
    );
    let tokenId = BigInt.fromI32(234);
    let newApprovalEvent = createApprovalEvent(owner, approved, tokenId);
    handleApproval(newApprovalEvent);
  });

  afterAll(() => {
    clearStore();
  });

  // For more test scenarios, see:
  // https://thegraph.com/docs/en/developer/matchstick/#write-a-unit-test

  test('Approval created and stored', () => {
    assert.entityCount('Approval', 1);

    // 0xa16081f360e3847006db660bae1c6d1b2e17ec2a is the default address used in newMockEvent() function
    assert.fieldEquals(
      'Approval',
      '0xa16081f360e3847006db660bae1c6d1b2e17ec2a-1',
      'owner',
      '0x0000000000000000000000000000000000000001'
    );
    assert.fieldEquals(
      'Approval',
      '0xa16081f360e3847006db660bae1c6d1b2e17ec2a-1',
      'approved',
      '0x0000000000000000000000000000000000000001'
    );
    assert.fieldEquals(
      'Approval',
      '0xa16081f360e3847006db660bae1c6d1b2e17ec2a-1',
      'tokenId',
      '234'
    );

    // More assert options:
    // https://thegraph.com/docs/en/developer/matchstick/#asserts
  });
});
