/* eslint-env mocha */
'use strict'

const { expect } = require('aegir/utils/chai')
const multiaddr = require('multiaddr')

const arrayEquals = require('../src/array-equals')

describe('non primitive array equals', () => {
  it('returns true if two arrays of multiaddrs are equal', () => {
    const a = [
      multiaddr('/ip4/127.0.0.1/tcp/8000'),
      multiaddr('/ip4/127.0.0.1/tcp/3000/ws'),
      multiaddr('/dns4/test.libp2p.io')
    ]

    const b = [
      multiaddr('/ip4/127.0.0.1/tcp/8000'),
      multiaddr('/ip4/127.0.0.1/tcp/3000/ws'),
      multiaddr('/dns4/test.libp2p.io')
    ]

    expect(arrayEquals(a, b)).to.eql(true)
  })

  it('returns true if two arrays of multiaddrs have the same content but different orders', () => {
    const a = [
      multiaddr('/ip4/127.0.0.1/tcp/8000'),
      multiaddr('/ip4/127.0.0.1/tcp/3000/ws'),
      multiaddr('/dns4/test.libp2p.io')
    ]

    const b = [
      multiaddr('/ip4/127.0.0.1/tcp/3000/ws'),
      multiaddr('/ip4/127.0.0.1/tcp/8000'),
      multiaddr('/dns4/test.libp2p.io')
    ]

    expect(arrayEquals(a, b)).to.eql(true)
  })

  it('returns false if two arrays of multiaddrs are different', () => {
    const a = [
      multiaddr('/ip4/127.0.0.1/tcp/8000'),
      multiaddr('/ip4/127.0.0.1/tcp/3000/ws'),
      multiaddr('/dns4/test.libp2p.io')
    ]

    const b = [
      multiaddr('/ip4/127.0.0.1/tcp/8001'),
      multiaddr('/ip4/127.0.0.1/tcp/3000/ws'),
      multiaddr('/dns4/test.libp2p.io')
    ]

    expect(arrayEquals(a, b)).to.eql(false)
  })

  it('returns false if two arrays of multiaddrs are partially equal, but different lengths', () => {
    const a = [
      multiaddr('/ip4/127.0.0.1/tcp/8000'),
      multiaddr('/ip4/127.0.0.1/tcp/3000/ws'),
      multiaddr('/dns4/test.libp2p.io')
    ]

    const b = [
      multiaddr('/ip4/127.0.0.1/tcp/8000'),
      multiaddr('/dns4/test.libp2p.io')
    ]

    expect(arrayEquals(a, b)).to.eql(false)
  })
})