Function call to proxy contract failing to execute the (logic contract's) function

I’m still trying to understand (as in my above post) the issue with my Truffle integration testing of my proxy contract together with my logic contract (i.e. My proxy contract is unable to invoke my logic contract functions when they are called against my proxy contract).

I see that all the tutorial ‘Box’ examples use ‘deployProxy’ together with the (Box) logic contract. This is the approach I used with my first set of ‘unit’ tests that confirmed that my wallet logic contract still worked (after refactoring to remove constructors) and the contract is updatable - which all worked fine. However, now I have created my contract (walletProxy), I don’t see any examples of how to integration test my walletProxy with my wallet logic contract. I’m still stuck on getting my Truffle integration test script to check that my own proxy contract (WalletProxy - see code in my post above) calls my wallet logic contract (MultiSigWallet). The examples in ‘box’ tutorial all use ‘deployProxy’ which, as I understand it, creates a proxy for the logic contract and but when I swap this proxy for my actual walletProxy contract, the logic function calls to my walletProxy fail to find/invoke the corresponding logic function…

The ’ Step by Step Tutorial for Truffle’ does show a deployment script ( 2_deploy_box.js) for deploying to a public network but again this uses deployProxy - so (if I understand it correctly) I can’t use this directly to test my own WalletProxy contract (to ensure it routes calls to my logic contract). However, the tutorial then says: " We would normally first deploy our contract to a local test (such as ganache-cli ) and manually interact with it."
I’ve therefore written the following migration script, deployed locally (to ganache-cli) and used Truffle console command line to (again unsuccessfully) call my wallets (logic) contract functions on the walletProxy. See migration script and test calls below.

I now suspect that Truffle doesn’t support full integration testing of a specific proxy contract with a logic contract? Is that the case? Or is there a way to use Truffle and ganache-cli to ‘integration’ test locally (ideally via a Truffle test script)? And if not, does this mean I can only do such ‘integration’ testing after I deploy to an Ethereum testnet ?

Here’s my WalletProxy → Wallet logic integration deployment script (and then the results of truffle CLI function calls):

Any assistance in helping me understand this and how I should proceed with ‘integration’ testing my own proxy and logic contracts would be much appreciated.

2_wallet_logic_&proxy&_admin.js

// Wallet initialization data parameters
const numTxApprovals = 2
let owners

// Deploy the Wallet's Logic contract
const { deployProxy } = require('@openzeppelin/truffle-upgrades')

const MultiSigWallet = artifacts.require("MultiSigWallet")
const WalletProxyAdmin = artifacts.require("WalletProxyAdmin")
const WalletProxy = artifacts.require("WalletProxy")

let logicInstance
let adminInstance
let walletProxyInstance

module.exports = async function (deployer, network, accounts) {

    // Wallet owners
    owners = [
      accounts[0],
      accounts[1],
      accounts[2],
    ]
  
  // Deploy the Wallet's Logic contract
  logicInstance = await deployProxy(
    MultiSigWallet, 
    [owners, numTxApprovals], 
    { deployer }
  )
  console.log("Deployed Logic Contract - MultiSigWallet:", logicInstance.address)

  // Deploy the Wallet's Admin contract
  await deployer.deploy(WalletProxyAdmin)
  adminInstance = await WalletProxyAdmin.deployed()
  console.log("Deployed WalletProxyAdmin:", adminInstance.address)
  
  // Deploy the Wallet's Proxy contract 
  await deployer.deploy(
    WalletProxy,
    logicInstance.address,
    adminInstance.address,
    "0x",
    {from: accounts[0]}
  )
  walletProxyInstance = await WalletProxy.deployed()
  console.log("Deployed WalletProxy:", walletProxyInstance.address)
}

Following deploy to ganache-cli: Failing Logic function calls via Proxy:

Mark$ truffle console
truffle(development)> let proxyInstance = await WalletProxy.deployed()
undefined
truffle(development)> await proxyInstance.getWalletBalance()
Uncaught TypeError: proxyInstance.getWalletBalance is not a function
    at evalmachine.<anonymous>:1:23
truffle(development)> await proxyInstance.getWalletCreator()
Uncaught TypeError: proxyInstance.getWalletCreator is not a function
    at evalmachine.<anonymous>:1:23
truffle(development)> await proxyInstance.totalTransferRequests()
Uncaught TypeError: proxyInstance.totalTransferRequests is not a function
    at evalmachine.<anonymous>:1:23
truffle(development)> 
truffle(development)> let logicInstance = await MultiSigWallet.deployed()
undefined
truffle(development)> await logicInstance.getWalletBalance()
BN { negative: 0, words: [ 0, <1 empty item> ], length: 1, red: null }
truffle(development)> await logicInstance.getWalletCreator()
'0xfC1d4eA100c57A6D975eD8182FaAcFD17871a1e4'
truffle(development)> await logicInstance.totalTransferRequests()
BN { negative: 0, words: [ 0, <1 empty item> ], length: 1, red: null }
truffle(development)>