Tests updated to compare SVGs loading expected ones

This commit is contained in:
donosonaumczuk
2022-03-30 17:54:13 +01:00
parent efc5a811fe
commit 268055df77
2 changed files with 122 additions and 87 deletions

View File

@@ -6,9 +6,11 @@ import { MAX_UINT256, ZERO_ADDRESS } from '../../helpers/constants';
import { ERRORS } from '../../helpers/errors';
import {
cancelWithPermitForAll,
getJsonMetadataFromBase64TokenUri,
getDecodedSvgImage,
getMetadataFromBase64TokenUri,
getSetFollowNFTURIWithSigParts,
getSetProfileImageURIWithSigParts,
loadTestResourceAsUtf8String,
} from '../../helpers/utils';
import {
FIRST_PROFILE_ID,
@@ -67,132 +69,130 @@ makeSuiteCleanRoom('Profile URI Functionality', function () {
context('Scenarios', function () {
it('User should have a custom picture tokenURI after setting the profile imageURI', async function () {
await expect(lensHub.setProfileImageURI(FIRST_PROFILE_ID, MOCK_URI)).to.not.be.reverted;
const tokenURI = await lensHub.tokenURI(FIRST_PROFILE_ID);
const jsonMetadata = await getJsonMetadataFromBase64TokenUri(tokenURI);
expect(jsonMetadata.name).to.eq(`@${MOCK_PROFILE_HANDLE}`);
expect(jsonMetadata.description).to.eq(`@${MOCK_PROFILE_HANDLE} - Lens profile`);
const tokenUri = await lensHub.tokenURI(FIRST_PROFILE_ID);
const metadata = await getMetadataFromBase64TokenUri(tokenUri);
expect(metadata.name).to.eq(`@${MOCK_PROFILE_HANDLE}`);
expect(metadata.description).to.eq(`@${MOCK_PROFILE_HANDLE} - Lens profile`);
const expectedAttributes = [
{ trait_type: 'id', value: `#${FIRST_PROFILE_ID.toString()}` },
{ trait_type: 'followers', value: '0' },
{ trait_type: 'owner', value: userAddress.toLowerCase() },
{ trait_type: 'handle', value: `@${MOCK_PROFILE_HANDLE}` },
];
expect(jsonMetadata.attributes).to.eql(expectedAttributes);
expect(keccak256(toUtf8Bytes(tokenURI))).to.eq(
'0xff9081b5ef994d2a060d3d34247641822fde6356f135f61a136298bb01a22958'
);
expect(metadata.attributes).to.eql(expectedAttributes);
const actualSvg = await getDecodedSvgImage(metadata);
const expectedSvg = loadTestResourceAsUtf8String('profile-token-uri-images/mock.svg');
expect(actualSvg).to.eq(expectedSvg);
});
it('Default image should be used when no imageURI set', async function () {
await expect(lensHub.setProfileImageURI(FIRST_PROFILE_ID, '')).to.not.be.reverted;
const tokenURI = await lensHub.tokenURI(FIRST_PROFILE_ID);
const jsonMetadata = await getJsonMetadataFromBase64TokenUri(tokenURI);
expect(jsonMetadata.name).to.eq(`@${MOCK_PROFILE_HANDLE}`);
expect(jsonMetadata.description).to.eq(`@${MOCK_PROFILE_HANDLE} - Lens profile`);
const tokenUri = await lensHub.tokenURI(FIRST_PROFILE_ID);
const metadata = await getMetadataFromBase64TokenUri(tokenUri);
expect(metadata.name).to.eq(`@${MOCK_PROFILE_HANDLE}`);
expect(metadata.description).to.eq(`@${MOCK_PROFILE_HANDLE} - Lens profile`);
const expectedAttributes = [
{ trait_type: 'id', value: `#${FIRST_PROFILE_ID.toString()}` },
{ trait_type: 'followers', value: '0' },
{ trait_type: 'owner', value: userAddress.toLowerCase() },
{ trait_type: 'handle', value: `@${MOCK_PROFILE_HANDLE}` },
];
expect(jsonMetadata.attributes).to.eql(expectedAttributes);
expect(keccak256(toUtf8Bytes(tokenURI))).to.eq(
'0x925e156f8ef4706b40bf15bbb279a4f1a924ec8c166ebf2136c423b336ca5512'
);
expect(metadata.attributes).to.eql(expectedAttributes);
const actualSvg = await getDecodedSvgImage(metadata);
const expectedSvg = loadTestResourceAsUtf8String('profile-token-uri-images/default.svg');
expect(actualSvg).to.eq(expectedSvg);
});
it('Default image should be used when imageURI contains double-quotes', async function () {
const imageURI =
const imageUri =
'https://ipfs.io/ipfs/QmbWqxBEKC3P8tqsKc98xmWNzrztRLMiMPL8wBuTGsMnR" <rect x="10" y="10" fill="red';
await expect(lensHub.setProfileImageURI(FIRST_PROFILE_ID, imageURI)).to.not.be.reverted;
const tokenURI = await lensHub.tokenURI(FIRST_PROFILE_ID);
const jsonMetadata = await getJsonMetadataFromBase64TokenUri(tokenURI);
expect(jsonMetadata.name).to.eq(`@${MOCK_PROFILE_HANDLE}`);
expect(jsonMetadata.description).to.eq(`@${MOCK_PROFILE_HANDLE} - Lens profile`);
await expect(lensHub.setProfileImageURI(FIRST_PROFILE_ID, imageUri)).to.not.be.reverted;
const tokenUri = await lensHub.tokenURI(FIRST_PROFILE_ID);
const metadata = await getMetadataFromBase64TokenUri(tokenUri);
expect(metadata.name).to.eq(`@${MOCK_PROFILE_HANDLE}`);
expect(metadata.description).to.eq(`@${MOCK_PROFILE_HANDLE} - Lens profile`);
const expectedAttributes = [
{ trait_type: 'id', value: `#${FIRST_PROFILE_ID.toString()}` },
{ trait_type: 'followers', value: '0' },
{ trait_type: 'owner', value: userAddress.toLowerCase() },
{ trait_type: 'handle', value: `@${MOCK_PROFILE_HANDLE}` },
];
expect(jsonMetadata.attributes).to.eql(expectedAttributes);
expect(keccak256(toUtf8Bytes(tokenURI))).to.eq(
'0x925e156f8ef4706b40bf15bbb279a4f1a924ec8c166ebf2136c423b336ca5512'
);
expect(metadata.attributes).to.eql(expectedAttributes);
const actualSvg = await getDecodedSvgImage(metadata);
const expectedSvg = loadTestResourceAsUtf8String('profile-token-uri-images/default.svg');
expect(actualSvg).to.eq(expectedSvg);
});
it('Should return the correct tokenURI after transfer', async function () {
const tokenURIBeforeTransfer = await lensHub.tokenURI(FIRST_PROFILE_ID);
const jsonMetadataBeforeTransfer = await getJsonMetadataFromBase64TokenUri(
tokenURIBeforeTransfer
);
expect(jsonMetadataBeforeTransfer.name).to.eq(`@${MOCK_PROFILE_HANDLE}`);
expect(jsonMetadataBeforeTransfer.description).to.eq(
`@${MOCK_PROFILE_HANDLE} - Lens profile`
);
const tokenUriBeforeTransfer = await lensHub.tokenURI(FIRST_PROFILE_ID);
const metadataBeforeTransfer = await getMetadataFromBase64TokenUri(tokenUriBeforeTransfer);
expect(metadataBeforeTransfer.name).to.eq(`@${MOCK_PROFILE_HANDLE}`);
expect(metadataBeforeTransfer.description).to.eq(`@${MOCK_PROFILE_HANDLE} - Lens profile`);
const expectedAttributesBeforeTransfer = [
{ trait_type: 'id', value: `#${FIRST_PROFILE_ID.toString()}` },
{ trait_type: 'followers', value: '0' },
{ trait_type: 'owner', value: userAddress.toLowerCase() },
{ trait_type: 'handle', value: `@${MOCK_PROFILE_HANDLE}` },
];
expect(jsonMetadataBeforeTransfer.attributes).to.eql(expectedAttributesBeforeTransfer);
expect(metadataBeforeTransfer.attributes).to.eql(expectedAttributesBeforeTransfer);
const svgBeforeTransfer = await getDecodedSvgImage(metadataBeforeTransfer);
const expectedSvg = loadTestResourceAsUtf8String(
'profile-token-uri-images/mock-profile.svg'
);
expect(svgBeforeTransfer).to.eq(expectedSvg);
await expect(
lensHub.transferFrom(userAddress, userTwoAddress, FIRST_PROFILE_ID)
).to.not.be.reverted;
const tokenURIAfterTransfer = await lensHub.tokenURI(FIRST_PROFILE_ID);
const jsonMetadataAfterTransfer = await getJsonMetadataFromBase64TokenUri(
tokenURIAfterTransfer
);
expect(jsonMetadataAfterTransfer.name).to.eq(`@${MOCK_PROFILE_HANDLE}`);
expect(jsonMetadataAfterTransfer.description).to.eq(
`@${MOCK_PROFILE_HANDLE} - Lens profile`
);
const tokenUriAfterTransfer = await lensHub.tokenURI(FIRST_PROFILE_ID);
const metadataAfterTransfer = await getMetadataFromBase64TokenUri(tokenUriAfterTransfer);
expect(metadataAfterTransfer.name).to.eq(`@${MOCK_PROFILE_HANDLE}`);
expect(metadataAfterTransfer.description).to.eq(`@${MOCK_PROFILE_HANDLE} - Lens profile`);
const expectedAttributesAfterTransfer = [
{ trait_type: 'id', value: `#${FIRST_PROFILE_ID.toString()}` },
{ trait_type: 'followers', value: '0' },
{ trait_type: 'owner', value: userTwoAddress.toLowerCase() },
{ trait_type: 'handle', value: `@${MOCK_PROFILE_HANDLE}` },
];
expect(jsonMetadataAfterTransfer.attributes).to.eql(expectedAttributesAfterTransfer);
expect(metadataAfterTransfer.attributes).to.eql(expectedAttributesAfterTransfer);
const svgAfterTransfer = await getDecodedSvgImage(metadataAfterTransfer);
expect(svgAfterTransfer).to.eq(expectedSvg);
});
it('Should return the correct tokenURI after a follow', async function () {
const tokenURIBeforeTransfer = await lensHub.tokenURI(FIRST_PROFILE_ID);
const jsonMetadataBeforeTransfer = await getJsonMetadataFromBase64TokenUri(
tokenURIBeforeTransfer
);
expect(jsonMetadataBeforeTransfer.name).to.eq(`@${MOCK_PROFILE_HANDLE}`);
expect(jsonMetadataBeforeTransfer.description).to.eq(
`@${MOCK_PROFILE_HANDLE} - Lens profile`
);
const expectedAttributesBeforeTransfer = [
const tokenUriBeforeFollow = await lensHub.tokenURI(FIRST_PROFILE_ID);
const metadataBeforeFollow = await getMetadataFromBase64TokenUri(tokenUriBeforeFollow);
expect(metadataBeforeFollow.name).to.eq(`@${MOCK_PROFILE_HANDLE}`);
expect(metadataBeforeFollow.description).to.eq(`@${MOCK_PROFILE_HANDLE} - Lens profile`);
const expectedAttributesBeforeFollow = [
{ trait_type: 'id', value: `#${FIRST_PROFILE_ID.toString()}` },
{ trait_type: 'followers', value: '0' },
{ trait_type: 'owner', value: userAddress.toLowerCase() },
{ trait_type: 'handle', value: `@${MOCK_PROFILE_HANDLE}` },
];
expect(jsonMetadataBeforeTransfer.attributes).to.eql(expectedAttributesBeforeTransfer);
expect(metadataBeforeFollow.attributes).to.eql(expectedAttributesBeforeFollow);
const svgBeforeFollow = await getDecodedSvgImage(metadataBeforeFollow);
const expectedSvg = loadTestResourceAsUtf8String(
'profile-token-uri-images/mock-profile.svg'
);
expect(svgBeforeFollow).to.eq(expectedSvg);
await expect(lensHub.follow([FIRST_PROFILE_ID], [[]])).to.not.be.reverted;
const tokenURIAfterTransfer = await lensHub.tokenURI(FIRST_PROFILE_ID);
const jsonMetadataAfterTransfer = await getJsonMetadataFromBase64TokenUri(
tokenURIAfterTransfer
);
expect(jsonMetadataAfterTransfer.name).to.eq(`@${MOCK_PROFILE_HANDLE}`);
expect(jsonMetadataAfterTransfer.description).to.eq(
`@${MOCK_PROFILE_HANDLE} - Lens profile`
);
const expectedAttributesAfterTransfer = [
const tokenUriAfterFollow = await lensHub.tokenURI(FIRST_PROFILE_ID);
const metadataAfterFollow = await getMetadataFromBase64TokenUri(tokenUriAfterFollow);
expect(metadataAfterFollow.name).to.eq(`@${MOCK_PROFILE_HANDLE}`);
expect(metadataAfterFollow.description).to.eq(`@${MOCK_PROFILE_HANDLE} - Lens profile`);
const expectedAttributesAfterFollow = [
{ trait_type: 'id', value: `#${FIRST_PROFILE_ID.toString()}` },
{ trait_type: 'followers', value: '1' },
{ trait_type: 'owner', value: userAddress.toLowerCase() },
{ trait_type: 'handle', value: `@${MOCK_PROFILE_HANDLE}` },
];
expect(jsonMetadataAfterTransfer.attributes).to.eql(expectedAttributesAfterTransfer);
expect(metadataAfterFollow.attributes).to.eql(expectedAttributesAfterFollow);
const svgAfterFollow = await getDecodedSvgImage(metadataAfterFollow);
expect(svgAfterFollow).to.eq(expectedSvg);
});
it('User should set user two as a dispatcher on their profile, user two should set the profile URI', async function () {
@@ -200,10 +200,20 @@ makeSuiteCleanRoom('Profile URI Functionality', function () {
await expect(
lensHub.connect(userTwo).setProfileImageURI(FIRST_PROFILE_ID, MOCK_URI)
).to.not.be.reverted;
const tokenURI = await lensHub.tokenURI(FIRST_PROFILE_ID);
expect(keccak256(toUtf8Bytes(tokenURI))).to.eq(
'0xff9081b5ef994d2a060d3d34247641822fde6356f135f61a136298bb01a22958'
);
const tokenUri = await lensHub.tokenURI(FIRST_PROFILE_ID);
const metadata = await getMetadataFromBase64TokenUri(tokenUri);
expect(metadata.name).to.eq(`@${MOCK_PROFILE_HANDLE}`);
expect(metadata.description).to.eq(`@${MOCK_PROFILE_HANDLE} - Lens profile`);
const expectedAttributes = [
{ trait_type: 'id', value: `#${FIRST_PROFILE_ID.toString()}` },
{ trait_type: 'followers', value: '0' },
{ trait_type: 'owner', value: userAddress.toLowerCase() },
{ trait_type: 'handle', value: `@${MOCK_PROFILE_HANDLE}` },
];
expect(metadata.attributes).to.eql(expectedAttributes);
const actualSvg = await getDecodedSvgImage(metadata);
const expectedSvg = loadTestResourceAsUtf8String('profile-token-uri-images/mock.svg');
expect(actualSvg).to.eq(expectedSvg);
});
it('User should follow profile 1, user should change the follow NFT URI, URI is accurate before and after the change', async function () {
@@ -436,11 +446,22 @@ makeSuiteCleanRoom('Profile URI Functionality', function () {
MAX_UINT256
);
const tokenURIBefore = await lensHub.tokenURI(FIRST_PROFILE_ID);
expect(keccak256(toUtf8Bytes(tokenURIBefore))).to.eq(
'0x7b45978b5b829f26417f92602e10fca9ce4b9fba4cdec497b717748d3417d9fb'
const tokenUriBefore = await lensHub.tokenURI(FIRST_PROFILE_ID);
const metadataBefore = await getMetadataFromBase64TokenUri(tokenUriBefore);
expect(metadataBefore.name).to.eq(`@${MOCK_PROFILE_HANDLE}`);
expect(metadataBefore.description).to.eq(`@${MOCK_PROFILE_HANDLE} - Lens profile`);
const expectedAttributesBefore = [
{ trait_type: 'id', value: `#${FIRST_PROFILE_ID.toString()}` },
{ trait_type: 'followers', value: '0' },
{ trait_type: 'owner', value: testWallet.address.toLowerCase() },
{ trait_type: 'handle', value: `@${MOCK_PROFILE_HANDLE}` },
];
expect(metadataBefore.attributes).to.eql(expectedAttributesBefore);
const svgBefore = await getDecodedSvgImage(metadataBefore);
const expectedSvgBefore = loadTestResourceAsUtf8String(
'profile-token-uri-images/mock-profile.svg'
);
expect(svgBefore).to.eq(expectedSvgBefore);
await expect(
lensHub.setProfileImageURIWithSig({
@@ -455,14 +476,24 @@ makeSuiteCleanRoom('Profile URI Functionality', function () {
})
).to.not.be.reverted;
const tokenURIAfter = await lensHub.tokenURI(FIRST_PROFILE_ID);
const tokenUriAfter = await lensHub.tokenURI(FIRST_PROFILE_ID);
expect(MOCK_PROFILE_URI).to.not.eq(MOCK_URI);
expect(tokenURIBefore).to.not.eq(tokenURIAfter);
expect(tokenUriBefore).to.not.eq(tokenUriAfter);
expect(keccak256(toUtf8Bytes(tokenURIAfter))).to.eq(
'0xce651a006011fbb3c4998906a4c9677764432e77f8482a278c9f51ae370e72a4'
);
const metadataAfter = await getMetadataFromBase64TokenUri(tokenUriAfter);
expect(metadataAfter.name).to.eq(`@${MOCK_PROFILE_HANDLE}`);
expect(metadataAfter.description).to.eq(`@${MOCK_PROFILE_HANDLE} - Lens profile`);
const expectedAttributesAfter = [
{ trait_type: 'id', value: `#${FIRST_PROFILE_ID.toString()}` },
{ trait_type: 'followers', value: '0' },
{ trait_type: 'owner', value: testWallet.address.toLowerCase() },
{ trait_type: 'handle', value: `@${MOCK_PROFILE_HANDLE}` },
];
expect(metadataAfter.attributes).to.eql(expectedAttributesAfter);
const svgAfter = await getDecodedSvgImage(metadataAfter);
const expectedSvgAfter = loadTestResourceAsUtf8String('profile-token-uri-images/mock.svg');
expect(svgAfter).to.eq(expectedSvgAfter);
});
it('TestWallet should set the follow NFT URI with sig', async function () {

View File

@@ -4,7 +4,11 @@ import { keccak256, toUtf8Bytes } from 'ethers/lib/utils';
import { UIDataProvider__factory } from '../../typechain-types';
import { ZERO_ADDRESS } from '../helpers/constants';
import { ERRORS } from '../helpers/errors';
import { getJsonMetadataFromBase64TokenUri } from '../helpers/utils';
import {
getDecodedSvgImage,
getMetadataFromBase64TokenUri,
loadTestResourceAsUtf8String,
} from '../helpers/utils';
import {
approvalFollowModule,
deployer,
@@ -155,20 +159,20 @@ makeSuiteCleanRoom('Misc', function () {
});
it('Profile tokenURI should return the accurate URI', async function () {
const tokenURI = await lensHub.tokenURI(FIRST_PROFILE_ID);
const jsonMetadata = await getJsonMetadataFromBase64TokenUri(tokenURI);
expect(jsonMetadata.name).to.eq(`@${MOCK_PROFILE_HANDLE}`);
expect(jsonMetadata.description).to.eq(`@${MOCK_PROFILE_HANDLE} - Lens profile`);
const tokenUri = await lensHub.tokenURI(FIRST_PROFILE_ID);
const metadata = await getMetadataFromBase64TokenUri(tokenUri);
expect(metadata.name).to.eq(`@${MOCK_PROFILE_HANDLE}`);
expect(metadata.description).to.eq(`@${MOCK_PROFILE_HANDLE} - Lens profile`);
const expectedAttributes = [
{ trait_type: 'id', value: `#${FIRST_PROFILE_ID.toString()}` },
{ trait_type: 'followers', value: '0' },
{ trait_type: 'owner', value: userAddress.toLowerCase() },
{ trait_type: 'handle', value: `@${MOCK_PROFILE_HANDLE}` },
];
expect(jsonMetadata.attributes).to.eql(expectedAttributes);
expect(keccak256(toUtf8Bytes(tokenURI))).to.eq(
'0x043e3fd9d03631bea9bddb148f76bb9cff39a8d5d7ce20e5b3b88ea2ad2b9340'
);
expect(metadata.attributes).to.eql(expectedAttributes);
const actualSvg = await getDecodedSvgImage(metadata);
const expectedSvg = loadTestResourceAsUtf8String('profile-token-uri-images/mock-profile.svg');
expect(actualSvg).to.eq(expectedSvg);
});
it('Publication reference module getter should return the correct reference module (or zero in case of no reference module)', async function () {