DocDelivery / test / DocDelivery.js
DocDelivery.js
Raw
const { constants } = require('@openzeppelin/test-helpers');
const { ZERO_ADDRESS } = constants;

const { expect } = require("chai");
const { ethers } = require("hardhat");

describe("DocDelivery", function () {
  let notifications;
  //Tests params
  let _id;
  const _tm = 1;
  const _td = 700000000000;
  const _h = "0xb1d09af3a1f7581f4e596c87965e9536dcced8bf81636f4ec11ee521f202e9d2";
  const _fc = "0xec8f82847589560cd5220e1a4acb999d50703cdced50980f7e12ed07f654da0e28554705210484a5e301c7c7b7f142f267a1637a195cfe6c161c5a6baccdf6421c";
  const k = ethers.toUtf8Bytes("xjrrtwvkzyVrTAuMKvjgPbVbMyDb07w6ub4y2PtWvrwuS1vV");

  beforeEach(async function () {
    [owner, sender, receiver] = await ethers.getSigners();
    docDelivery = await ethers.getContractFactory("DocDelivery");
    notifications = await docDelivery.deploy();
    await notifications.waitForDeployment();
    _id = ethers.keccak256(ethers.solidityPacked(
      ['address', 'address', 'address', 'bytes32', 'uint', 'uint'],
      [sender.address, receiver.address, notifications.target, _h, _tm, _td]
    ));
  });
  //Once the smart contract is deployed
  describe('once deployed', function () {
    it('has owner and address', async function () {
      expect(notifications.runner.address).to.equal(owner.address);
      expect(notifications.target).to.not.equal(ZERO_ADDRESS);
    });

    describe('undefined state', function () {
      it('accept from receiver allowed', async function () {
        const tx = await notifications.connect(receiver).accept(_id, sender.address, _h, _tm, _td, _fc);
        await expect(tx).to.emit(notifications, 'Result');
      });
      it('does not allow publish to receiver', async function () {
        await expect(
          notifications.connect(receiver).publish(_id, k)
        ).to.be.reverted;
      });
    });

    describe('accept state', function () {
      beforeEach(async function () {
        await notifications.connect(receiver).accept(_id, sender.address, _h, _tm, _td, _fc);
      });
      it('does not allow accept from receiver', async function () {
        await expect(
          notifications.connect(receiver).accept(_id, sender.address, _h, _tm, _td, _fc)
        ).to.be.reverted;
      });
      it('does allow publish from sender', async function () {
        const tx = notifications.connect(sender).publish(_id, k);
        await expect(tx).to.emit(notifications, 'Result');
      });
    });

    describe('delivered state', function () {
      beforeEach(async function () {
        await notifications.connect(receiver).accept(_id, sender.address, _h, _tm, _td, _fc);
        await notifications.connect(sender).publish(_id, k);
      });
      it('does not allow accept from receiver', async function () {
        await expect(
          notifications.connect(receiver).accept(_id, sender.address, _h, _tm, _td, _fc)
        ).to.be.reverted;
      });
      it('does not allow publish from sender', async function () {
        await expect(
          notifications.connect(sender).publish(_id, k)
        ).to.be.reverted;
      });
    });
  });
});