Disabling policies while running tests sailsjs - sails.js

Is there any way to disable policies while running npm test in sails.js application ?
My config/policies.js looks like this,
module.exports.policies = {
'*': 'isLoggedIn',
};
all of my test cases are failing with following error
Uncaught Error: expected 200 "OK", got 401 "Unauthorized"

You can set a environment variable to control this. For example:
module.exports.policies = {
'*': process.env.IS_TEST ? true : 'isLoggedIn',
};
And then, you run this on your terminal:
IS_TEST=1 npm test

Related

Flow testnet getting: An error occurred when interacting with the Access API

I'm trying to make a request to the testnet but getting the following error:
HTTP Request Error: An error occurred when interacting with the Access API.
transport=FetchTransport
error=Failed to fetch hostname=access.devnet.nodes.onflow.org:9000
path=/v1/scripts?block_height=sealed
method=POST
requestBody={
"script":"aW1wb3J0IEZ1bmdpYmxlVG9rZW4gZnJvbSAweDlhMDc2NmQ5M2I2NjA4YjcKaW1wb3J0IEZVU0QgZnJvbSAweGUyMjNkOGE2MjllNDljNjgKCnB1YiBmdW4gbWFpbihhZGRyZXNzOiBBZGRyZXNzKTogVUZpeDY0IHsKICAgIGxldCBhY2NvdW50ID0gZ2V0QWNjb3VudChhZGRyZXNzKQoKICAgIGxldCB2YXVsdFJlZiA9IGFjY291bnQuZ2V0Q2FwYWJpbGl0eSgvcHVibGljL2Z1c2RCYWxhbmNlKSEKICAgICAgICAuYm9ycm93PCZGVVNELlZhdWx0e0Z1bmdpYmxlVG9rZW4uQmFsYW5jZX0+KCkKICAgICAgICA/PyBwYW5pYygiQ291bGQgbm90IGJvcnJvdyBCYWxhbmNlIHJlZmVyZW5jZSB0byB0aGUgVmF1bHQiKQoKICAgIHJldHVybiB2YXVsdFJlZi5iYWxhbmNlCn0=",
"arguments":["eyJ0eXBlIjoiQWRkcmVzcyIsInZhbHVlIjoiMHg1ODA2MjJlNzQ1MTgzYjE2In0="]
}
The base64 decoded script is:
import FungibleToken from 0x9a0766d93b6608b7
import FUSD from 0xe223d8a629e49c68
pub fun main(address: Address): UFix64 {
let account = getAccount(address)
let vaultRef = account.getCapability(/public/fusdBalance)!
.borrow<&FUSD.Vault{FungibleToken.Balance}>()
?? panic("Could not borrow Balance reference to the Vault")
return vaultRef.balance
}
and the arguments are:
{"type":"Address","value":"0x580622e745183b16"}
When I run the following command in the cli, it works: flow scripts execute -n testnet scripts/getFUSDBalance.cdc --arg "Address:580622e745183b16"
not sure why I'm getting issues with this
EDIT:
didn't mention that the error is coming from FCL
Here's the code I'm using to interact with Flow:
async getFUSDBalance(): Promise<Result<number, string>> {
const scriptText = getFUSDBalance as string;
const user = await this.getCurrentUser();
return await flow.query<number>({
cadence: scriptText,
payer: fcl.authz,
authorizations: [fcl.authz],
args: (arg, t) => [
arg(user.addr, t.Address)
]
})
}
flow.query<T> is just a wrapper for fcl.query
It works in the CLI but not from FCL
EDIT 2:
So I found that the real issue I was facing was I was getting this error:
Fetch API cannot load access.devnet.nodes.onflow.org:9000/v1/scripts?block_height=sealed. URL scheme "access.devnet.nodes.onflow.org" is not supported
access.devnet.nodes.onflow.org:9000 is gRPC (I think). I should have been using https://rest-testnet.onflow.org. However, when I change to that I get a CORS violation. I think I read somewhere that you can't access the testnet from localhost (why?), but I deployed to a *.app domain and I'm getting the same error No 'Access-Control-Allow-Origin' header is present on the requested resource. Is the CORS policy not set up for *.app domains?
So turns out changing to https://rest-testnet.onflow.org for the accessNode.api value did work. Not sure why it didn't when I posted the second edit, but whatever. This works for localhost too.

VSCode Jest Failing with SystaxError: Unexpected token =

The VScode Jest extension fails to run the the tests with output:
module.exports = (filename, opts = {}) => {
^
SyntaxError: Unexpected token =
at exports.runInThisContext (vm.js:53:16)
at Module._compile (module.js:374:25)
Starting Jest in Watch mode failed too many times and has been stopped.
see troubleshooting: https://github.com/jest-community/vscode-jest/blob/master/README.md#troubleshooting
I'm using webpack as described here: https://jestjs.io/docs/en/webpack
The problem is the system's node version.
vscode-jest runs on the system node, ignoring NVM versions.
To fix this make sure your system's node version is set to the specific node version your project is running, in my case it needs v8.16.0.
In order to upgrade your system's node (in case you are using Ubuntu) follow the next instructions:
https://github.com/nodesource/distributions/blob/master/README.md#deb

Protractor test fails on CI

Currently I am trying a setup an end to end protractor tests to a a bitbucket pipelines with set up an headless chrome and i am currently getting some error message:
Failed: This driver instance does not have a valid session ID (did you call WebDriver.quit()?) and may no longer be used.
Any clue for this? how ever running tests locally is working fine; Can i set a constant session id?
Thanks
Check out your configuration file for this object
capabilities: {
"browserName": "chrome",
"chromeOptions": {
"args": ["incognito", "--window-size=1920,1080", "disable-extensions", "--no-sandbox", "start-maximized", "--test-type=browser"],
"prefs": {
"download": {
"prompt_for_download": false,
"directory_upgrade": true,
"default_directory": path.join(process.cwd(), "__test__reports/downloads")
}
}
}
},
When you find it, make sure you included "--no-sandbox" argument into args property.
What this guy does is it allows your tests to be ran from a remote container. In the meantime, if you include the argument when you run your tests on your machine, it has side effects like described here Chrome Instances don't close after running Test Case in Protractor

Suppress Model Error in Sailsjs when testing

Using SailsJS 0.12.3 in my tests, I'm purposefully having my model validation fail, but it spits out those validation errors to the console making for a really messy test screen.
I know it's silly, but is there an easy way to suppress those errors?
debug: Environment : development
debug: Port : 1337
debug: -------------------------------------------------------
AuthController
/csrfToken
✓ should return a _csrf token for me to use
/api/v1/login
debug: Error (E_VALIDATION) :: 1 attribute is invalid
at WLValidationError.WLError
You can set the log level to error when you lift Sails:
sails.lift({log: {level: 'error'}});
Then you won't get debug-level messages anymore.

How to tell gruntfile to just test phantomJS on a pull request

I have been having pull request failing on Travis/SauceLabs while the merge build works good. When I get a pull request Travis fails with this code:
ERROR [launcher.sauce]: Can not start chrome (linux)
Failed to start Sauce Connect:
Could not start Sauce Connect. Exit code 1 signal: null
How can I test incoming pull requests just on Travis and test a merge on SauceLabs?
It's not possible yet to run pull requests on Sauce Labs when the sauce key/pass are encrypted. This is for safety reasons to not expose the credentials in case the PR has malicious code.
So what is possible is to use the
process.env.TRAVIS_PULL_REQUEST // (string)
to distinguish a pull request from a push/merge triggered test.
So, since this enviroment variable gives you a string with the pull request number or with "false", its possible to use it as a flag. So I used this on my Gruntfile:
var pullRequest = process.env.TRAVIS_PULL_REQUEST;
tasks = pullRequest != 'false' ? 'karma:continuous' : 'karma:sauceTask';
grunt.registerTask('default:travis', tasks);
and in my :continuous task I have only PhantomJS
continuous: {
browsers: ['PhantomJS']
},