> For the complete documentation index, see [llms.txt](https://docs.rairprotocol.org/rairprotocol/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.rairprotocol.org/rairprotocol/installation-and-testing/getting-started/rairlite-single-vm/mvp-test-plan.md).

# MVP Test Plan

Please complete the following test scenarios to ensure your deployment is functioning properly.

## Prerequisites&#x20;

* Application is deployed on a System (Laptop or Virtual Machine on any Cloud Provider) with 16GB memory
* Networking related configuration on VM is already completed (e.g., Opening of Ports, assigning of Public Static IP Address to VM)
* Metamask extension is installed on Browser (e.g., Chrome, Firefox, Brave etc.)
* Web3Auth configuration is complete (For Custodial wallets)
* Alchemy Key is defined in .env file (For deployment of contracts)
* Application with all services are running&#x20;

***

## Test Scenarios

### Login

* **Visit the application Home Page:**

<details>

<summary>Navigate to http://&#x3C;Server_IP_Address>:&#x3C;Port></summary>

You should see the Home Page displayed with Connect Button in the top right corner.

<img src="/files/OzEnPzxKSEOH6Mq9VOR5" alt="" data-size="original">

</details>

* **Login with Metamask wallet:**

<details>

<summary>Click on Connect Button</summary>

You will see a pop-up with an option to select a login method.

<img src="/files/n9FCi1uhBmN2yrDFdlVu" alt="" data-size="original">

</details>

<details>

<summary>Click on Web3</summary>

This will invoke Metamask to send a signature request.

<img src="/files/8kWD5KMGI5vRyDitF2vp" alt="" data-size="original">

</details>

<details>

<summary>Sign the signature request</summary>

Successful signature will connect the user with the system. You should see the authenticated user's Public Address as well as the Balance for the selected Blockchain

<img src="/files/wQGhvu8EviWR97HfgXiX" alt="" data-size="original">

</details>

* **Login with Web3Auth**

<details>

<summary>Click on Social Logins Button</summary>

Pop Up displayed with Option to connect using Google, Facebook, Instagram etc.

<img src="/files/3UKO1i5aueLEWlI4puDb" alt="" data-size="original">

</details>

<details>

<summary>Click on "Continue with Google"</summary>

Select this option if user wants to connect using Google.After verification of gmail credentials, a web3 wallet will be created and a Public address will be assigned.

</details>

***

### Admin User Tests

* **Configure environment variables for providing Admin access**

<details>

<summary>Navigate to Deployment Home Directory and edit .env file</summary>

Provide valid values for environment variables and save file

admin\_nft\_chain

admin\_contract

</details>

<details>

<summary>Restart application</summary>

</details>

* **Buy NFT**&#x20;

<details>

<summary>Buy NFT from configured admin contract</summary>

NFT minted successfully and can be verified on etherscan

</details>

* **Verify connected user has Admin Privileges**

<details>

<summary>Login with Metamask wallet</summary>

Verify that admin icon is displayed

<img src="/files/xhiMTe5AErqqshtYQQxI" alt="" data-size="original">

</details>

* **Update MongoDB for providing SuperAdmin access**

<details>

<summary>Update ServerSettings collection</summary>

Update superAdmins field of the collection by adding your Public Address. Changes will take effect on next login from Wallet.

Now, SuperAdmin user can add more SuperAdmins from UI.

</details>

<details>

<summary>Login with Metamask wallet</summary>

Verify that SuperAdmin icon is displayed

<img src="/files/SXUOKmWX3RCJWpNxzFUh" alt="" data-size="original">

</details>

* **Providing SuperAdmin privileges from UI**

<details>

<summary>Login with Metamask wallet with user having SuperAdmin rights</summary>

Verify that SuperAdmin icon is displayed

<img src="/files/SXUOKmWX3RCJWpNxzFUh" alt="" data-size="original">

</details>

<details>

<summary>Navigate to Admin Page</summary>

Click on SuperAdmin icon.This will display a drop down with icons.Click on the Admin icon.

<img src="/files/zq8q27S2dJBzbZZTGuaF" alt="" data-size="original">

Admin page is displayed

<img src="/files/xjaWFK3Kp1b3EuYZtrh4" alt="" data-size="original">

</details>

<details>

<summary>Provide SuperAdmin privileges to a Admin user</summary>

Scroll down page and under Super admins section, click on Add Button and enter public address in the text box followed by clicking on Set Super Admins Button

<img src="/files/LG4XpZc5gzjv0MRxdC5h" alt="" data-size="original">

Verify by login with Metamask with the new SuperAdmin user and check if the color of Admin icon is Golden

</details>

***

### Factory Deployment Tests

* **Contract Deployment**

<details>

<summary>Login with Metamask wallet with user having Admin or SuperAdmin rights</summary>

Verify that Admin / SuperAdmin icon is displayed

<img src="/files/SXUOKmWX3RCJWpNxzFUh" alt="" data-size="original">

</details>

<details>

<summary>Select Factory from Profile Dropdown</summary>

<img src="/files/GEtXFfTRT0bpetSJpzy9" alt="" data-size="original">

<img src="/files/RsFBPpfowbTA8hC0F50C" alt="" data-size="original">

Verify Contract Deployment page is displayed

<img src="/files/nddQ4snbqeDDi7zTmQJj" alt="" data-size="original">

</details>

<details>

<summary>Deploy Contract on Sepolia Blockchain</summary>

Note: *For contract deployment, enure that Alchemy API Key, RPC URL is defined in .env. Also, user should have at least 15 RAIR tokens on the chain on which contract deployment is to be done*

On Contract Deployment page, select Ethereum Sepolia from "Deploy On" Dropdown and enter text for Contract name text Box followed by click on "Deploy a diamond contract" Button

Verify that Step -1 to transfer 15 RAIR tokens request  is shown

<img src="/files/SJYAuTrmaGuZ4x8hhgeA" alt="" data-size="original">

&#x20;On approving transfer then Step-2 to deploy Contract is shown

</details>

* **Product/Collection creation**

<details>

<summary>Select Contract from Deployed Contracts List</summary>

Select Deployed Contracts Tab and also filter based on Blockchain

<img src="/files/14iSDAOqKvpJXUHSla6P" alt="" data-size="original">

Verify that list of Contracts are displayed and select a contract from list

</details>

<details>

<summary>Create Collection/Product</summary>

Enter Name of collection and specify Length (Number of NFTs in collection) and click on Create Collection Button. Verify Metamask transaction

<img src="/files/jRxNR38Fag5UiBfv4JMy" alt="" data-size="original">

Verify Collection created message is displayed

<img src="/files/a5Ll0r5ptzkyezFUYcfM" alt="" data-size="original">

</details>

<details>

<summary>Existing Collections list</summary>

Select Existing Collections Tab

<img src="/files/qNuSdIWY4F1UNeoRJWbn" alt="" data-size="original">

Verify that collection created in last step is shown in the list

</details>

* **Creating Ranges**

<details>

<summary>Select Collection from List</summary>

Select Collection from Existing collection list

Verify Ranges creation Page is displayed

<img src="/files/riRSJQarS0kJIKBISm8Q" alt="" data-size="original">

</details>

<details>

<summary>Create Range</summary>

Click on "Add new" Button

<img src="/files/6mJUDILxzFPVJef0geYl" alt="" data-size="original">

Verify that Form for Range creation is displayed. Enter details:

*Range name*  : range-1

*Starting token* :  0    (token number is starting from 0 )

*Ending token* :  49  (If 50 tokens are required in the Range)

*Range Price* :  1000000000000000   (in WEI)

Click on Create Ranges Button and Confirm transaction on Metamask

<img src="/files/g9FOaUdRoveM5zvf50Uu" alt="" data-size="original">

Verify that Offer/Range is created

</details>

* **Approving Marketplace and Putting Ranges up for sale**

<details>

<summary>Verify Range</summary>

Click Continue Button on Range Page

<img src="/files/MOMDOES1pS1NBxsizr3i" alt="" data-size="original">

Verify Offers page is displayed

<img src="/files/mLYIjn3KtAiIxRqLND2q" alt="" data-size="original">

</details>

<details>

<summary>Approve Marketplace as Minter</summary>

Click on "Approve the marketplace as Minter" Button and Confirm Metamask transaction

Verify Success Message

<img src="/files/4rLjgWw5hMnspQ3IakeU" alt="" data-size="original">

</details>

<details>

<summary>Put Selected Range up for sale</summary>

Click on "Put selected Ranges up for sale" Button and Confirm Metamask transaction

<img src="/files/3Jf87azMgdIgRoA02hJT" alt="" data-size="original">

<img src="/files/HVyhwz7rWATqsdy0FcbB" alt="" data-size="original">

Verify that Success message is displayed

<img src="/files/yGwy7gQwhW7fNzSk423U" alt="" data-size="original">

After this step, Collection will show up on Marketplace  and User can Mint tokens (tokens has no metadata at this point)

</details>

### Metadata Update Tests

* **Download Metadata csv Template file**

<details>

<summary>Login with Metamask wallet with user having Admin or SuperAdmin rights</summary>

Verify that Admin / SuperAdmin icon is displayed

<img src="/files/SXUOKmWX3RCJWpNxzFUh" alt="" data-size="original">

</details>

<details>

<summary>Select Factory from Profile Dropdown</summary>

<img src="/files/GEtXFfTRT0bpetSJpzy9" alt="" data-size="original">

<img src="/files/RsFBPpfowbTA8hC0F50C" alt="" data-size="original">

Verify Contract Deployment page is displayed

<img src="/files/nddQ4snbqeDDi7zTmQJj" alt="" data-size="original">

</details>

<details>

<summary><a href="#select-contract-from-deployed-contracts-list">Select Contract from Deployed Contracts List</a></summary>

</details>

<details>

<summary>Select Collection from List</summary>

</details>

<details>

<summary>Click on Step-3 Metadata Button</summary>

<img src="/files/bw9XOnIx4WQL2sjpMSOt" alt="" data-size="original">

Verify Batch Metadata Upload Page is displayed

<img src="/files/gjY8xTadMsejM7PPsQlF" alt="" data-size="original">

</details>

<details>

<summary>Download csv template</summary>

Click on "Download CSV Template"

<img src="/files/YngJSB9IvlizNaRo8MB0" alt="" data-size="original">

Verify CSV metadata file is downloaded

</details>

* **Uploading Metadata csv file**

<details>

<summary>Prepare Metadata csv file</summary>

Prepare metadata csv file with format as downloaded sample template

Sample csv file with metadata is attached (this is sample file, user can define own metadata as required)&#x20;

</details>

{% file src="/files/sFBfQ9Pbw25svGstDn5n" %}
Sample Metadata csv file
{% endfile %}

<details>

<summary>Upload Metadata csv file</summary>

Drag and Drop csv file on the area marked as 2 and click on Send Button

<img src="/files/stfXkcyHLCJRBDL9bVgP" alt="" data-size="original">

Verify Success message is displayed with count equal to the number of metadata entries (no. of rows with each row contains metadata for a NFT)

<img src="/files/UiiPT6G7PHmjfhGYqtv7" alt="" data-size="original">

</details>

### UI Customization Tests

* **Switch Theme**

<details>

<summary>Click on Switch Theme toggle icon</summary>

Default UI theme is Dark mode.Click on Switch Theme toggle icon to change theme

<img src="/files/6h8tr02IkTefLElzoc9H" alt="" data-size="original">

Verify Dark mode changes to Light mode. Note: This change in theme is applicable to current Browser session only.

<img src="/files/T7803eJNqohJyGLvsNhC" alt="" data-size="original">

</details>

* **Setting Custom Dark Mode Colors - Primary Color**

<details>

<summary>Login with Metamask wallet with user having SuperAdmin rights</summary>

Verify that SuperAdmin icon is displayed

<img src="/files/SXUOKmWX3RCJWpNxzFUh" alt="" data-size="original">

</details>

<details>

<summary>Select Primary Color</summary>

Under Custom Dark Mode Colors Section, click on Box next to Primary Color and select color.Click on "Set colors" Button

<img src="/files/5lCdXFdOP5PY7goo7m4o" alt="" data-size="original">

Verify Web Page color change as per selected Primary color

</details>

* **Setting Custom Dark Mode Colors - Secondary Color**

<details>

<summary>Select Secondary Color</summary>

Under Custom Dark Mode Colors Section, click on Box next to Secondary Color and select color.Click on "Set colors" Button

<img src="/files/c7X08nPI7M2h7M1r9LCk" alt="" data-size="original">

Verify Web Page color change as per selected Secondary color

</details>

* **Setting Custom Dark Mode Colors - Text Color**

<details>

<summary>Select Text Color</summary>

Under Custom Dark Mode Colors Section, click on Box next to Text Color and select color.Click on "Set colors" Button

<img src="/files/S6GMxmtdF4J0lyv9SWjp" alt="" data-size="original">

Verify Text color on Web Page change as per selected Text color

</details>

* **Setting Custom Dark Mode Colors - Primary Button Color**

<details>

<summary>Select Primary Button Color</summary>

Under Custom Dark Mode Colors Section, click on Box next to Primary Button Color and select color.Click on "Set colors" Button

Verify Button color on Web Page color change as per selected Primary Button color

</details>

* **Setting Custom Dark Mode Colors - Secondary Button Color**

<details>

<summary>Select Secondary Button Color</summary>

Under Custom Dark Mode Colors Section, click on Box next to Secondary Button Color and select color.Click on "Set colors" Button

Verify Button color on Web Page color change as per selected Secondary Button color

</details>

* **Setting Custom Dark Mode Colors - Fade Button Color**

<details>

<summary>Select Fade Button Color</summary>

Under Custom Dark Mode Colors Section, click on Box next to Fade Button Color and select color.Click on "Set colors" Button

Verify Button color on Web Page color change as per selected Fade Button color

</details>

***

### Contract Hiding Tests

* **Hiding Smart Contracts**

<details>

<summary>Login with Metamask wallet with user having SuperAdmin rights</summary>

Verify that SuperAdmin icon is displayed

<img src="/files/SXUOKmWX3RCJWpNxzFUh" alt="" data-size="original">

</details>

<details>

<summary>Navigate to Admin Page</summary>

Click on SuperAdmin icon.This will display a drop down with icons.Click on the Admin icon.

<img src="/files/zq8q27S2dJBzbZZTGuaF" alt="" data-size="original">

Admin page is displayed

<img src="/files/xjaWFK3Kp1b3EuYZtrh4" alt="" data-size="original">

</details>

<details>

<summary>Hide Contract</summary>

Under "Select  contract that needs to be hidden" Section, click on on the drop-down and select the contact that needs to be hidden and click on Hide Button

<img src="/files/UgFrCpAw3WX8LbY760G3" alt="" data-size="original">

Verify contract moves to the List of Hidden contracts on Left side. Also, Collections for these hidden contracts will not be shown on Home Page

</details>

* **Un-Hide Smart Contracts**

<details>

<summary>Show Contract</summary>

Click on the Show Button on the Left side List for contract which needs to be removed from Hidden list

<img src="/files/W7t4Sn6k7skhZkJeNiir" alt="" data-size="original">

Verify contract moves to the List of Visible contracts on Right side

</details>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.rairprotocol.org/rairprotocol/installation-and-testing/getting-started/rairlite-single-vm/mvp-test-plan.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
