Nothing
if (Sys.getenv("Run_RPushbullet_Tests")=="yes") {
## These simple tests rely on the existence of a config file with key and device info
## Otherwise we would have to hardcode a key and/or device id, and that is not something
## one should store in a code repository.
##
## I put a request in to the authors of Pushbullet to provide a "test id" key, and they
## are sympathetetic but do not have one implemented yet, and only suggested a woraround
# of a 'throwaway' GMail id which I find unappealing.
stopifnot(file.exists("~/.rpushbullet.json"))
library(RPushbullet)
## As there is a file, check the package global environment 'pb' we create on startup
RPushbullet:::.pkgenv[["pb"]]
RPushbullet:::.pkgenv[["pb"]][["key"]]
RPushbullet:::.pkgenv[["pb"]][["devices"]]
## As well as the options we create then too
getOption("rpushbullet.key")
getOption("rpushbullet.devices")
## Check the internal helper functions
RPushbullet:::.getKey()
RPushbullet:::.getDevices()
## Show the list of devices registered to the key
#require(RJSONIO)
require(jsonlite)
str(pbGetDevices())
## Test destinations
devices <- unlist(RPushbullet:::.getNames())
email <- RPushbullet:::.getTestEmail() ## or res$receiver_email?!?
channel <- RPushbullet:::.getTestChannel()
hasEmail <- (length(email) > 0L)
hasDevices <- (length(devices) > 0L)
hasChannel <- (length(channel) > 0L)
## Function to add incremental counts to titles
count <- local({
counter <- 0L
function(msg=NULL) {
if (identical(msg, FALSE)) return(counter)
counter <<- counter + 1L
if (identical(msg, TRUE)) return(counter)
sprintf("%02d. %s", counter, msg)
}
})
## Function to create incremental counted dummy files
testfile <- function(count=1L) {
filename <- sprintf("test_file_for_post_%02d.txt", count)
pathname <- file.path(tempdir(), filename)
cat(filename, file=pathname)
pathname
}
## Post a note item
title <- "A Simple Test"
body <- "We think this should work.\nWe really do."
res <- fromJSON(pbPost("note", count(title), body, debug=TRUE, verbose=TRUE)[[1]])
str(res)
## storing this test result to allow us to use active user's email for testing below.
## Post a URL -- should open browser
str(fromJSON(pbPost(type="link", title=count("Some title"), body="Some URL to click on",
url="https://cran.r-project.org/package=RPushbullet")[[1]]))
#### Posting Files with different arguments ####
## Post a file with no recipients
file <- testfile(count(TRUE))
str(fromJSON(pbPost(type="file", url=file)[[1]]))
if (hasDevices) {
## Post a file with numeric recipient
file <- testfile(count(TRUE))
str(fromJSON(pbPost(type="file", url=file, recipients = 1)[[1]]))
## Post a file with device name of recipient specified
file <- testfile(count(TRUE))
str(fromJSON(pbPost(type="file", url=file, recipients = devices)[[1]]))
## Post a file with an email recipient specified:
file <- testfile(count(TRUE))
str(fromJSON(pbPost(type="file", url=file,
email = res$receiver_email)[[1]]))
## Post file with both email and numeric recipient specified:
file <- testfile(count(TRUE))
str(fromJSON(pbPost(type="file", url=file,
recipients = devices[1],
email = res$receiver_email)[[1]]))
} # end of if (hasDevices)
if (Sys.getenv("Run_RPushbullet_Tests_All")=="yes" &&
hasChannel && hasDevices && hasEmail) {
## Test hierarchy of arguments with channel specified:
## 1) All three should send to recipients.
## 2) Email and channel should send to email.
## 3) Recipients and channel should send to recipients
## 4) Only channel should send to channel.
## Post a note with recipients, email and channel specified.
result <- fromJSON(pbPost(type="note", title=count(title), body=body,
recipients = devices[1],
email = email,
channel = channel)[[1]])
if (is.null(result$target_device_iden)) {
warning("Test failed on note with recipient/email/channel.")
}
## Post a note with email and channel specified.
result <- fromJSON(pbPost(type="note", title=count(title), body=body,
email = email,
channel = channel)[[1]])
if (is.null(result$receiver_email)) {
warning("Test Failed on note with email/channel.")
}
## Post a note with recipients and device and channel specified.
result <- fromJSON(pbPost(type="note", title=count(title), body=body,
recipients = devices[1],
channel = channel)[[1]])
if (is.null(result$target_device_iden)) {
warning("Test Failed on note with recipient/channel.")
}
## Post a note with only the channel specified.
str(fromJSON(pbPost(type="note", title=count(title), body=body,
channel = channel,
verbose=TRUE)[[1]]))
## Returns empty list, but posts successfully.
## API seems to return empty JSON. (tested curl command)
} # if ('runAll' && hasChannel && hasDevices && hasEmail)
if (Sys.getenv("Run_RPushbullet_Tests_All")=="yes") {
## real channel bad token
if (hasChannel) {
err <- try(pbPost(type="note", title=count(title), body=body,
channel = channel, apikey = "0123456789",
verbose=TRUE))
if (inherits(err, "try-error")) warning("Expected failure on fake apikey.")
if (!(grepl("401:",err[1]))) warning("Test Failed. Expected error code 401")
}
## fake channel
err <- try(pbPost(type="note", title=count(title), body=body,
channel = "0123456789-9876543210-{}",
verbose=TRUE))
if (inherits(err, "try-error")) warning("Expected failure on non-existing channel")
if (!(grepl("400:",err[1]))) warning("Test Failed. Expected error code 400")
}
## basic device info
devs <- pbGetDevices()
print(devs)
summary(devs)
## basic channel info
res <- pbGetChannelInfo("xkcd", TRUE)
print(res)
summary(res)
## basic user info
usr <- pbGetUser()
print(usr)
summary(usr)
## basic validity
RPushbullet:::.isValidKey(RPushbullet:::.getKey())
RPushbullet:::.isValidDevice(devs$devices[1, "iden"], RPushbullet:::.getKey())
RPushbullet:::.isValidChannel("xkcd")
jsonfile <- tempfile(pattern="pb", fileext=".json")
pbSetup(RPushbullet:::.getKey(), jsonfile, 0)
pbValidateConf(jsonfile)
## Post closing note
title <- count(sprintf("Test of RPushbullet %s completed", packageVersion("RPushbullet")))
body <- sprintf("In total %d posts were made including this one", count(FALSE))
res <- fromJSON(pbPost("note", title, body)[[1]])
str(res)
## Return code checking -- from an earlier draft of #64 but without imposing new depends
## Full credit to Thomas Shafer for the test logic.
## No credit though for insisting on a unit test framework.
## Tests for init.checkReturnCode
fakeRes <- function(status_code = 200, message = "") {
res <- list(
status_code = status_code,
content = charToRaw(message)
)
return(res)
}
.checkReturnCode <- RPushbullet:::.checkReturnCode
## .checkReturnCode does not warn and returns null for 200 response"
res <- fakeRes()
actual <- suppressWarnings(.checkReturnCode(res))
stopifnot(is.null(actual))
## .checkReturnCode warns and returns null for 400 response"
res <- fakeRes(status_code = 400)
actual <- suppressWarnings(.checkReturnCode(res), "Bad Request - Usually")
stopifnot(is.null(actual))
## .checkReturnCode warns and returns null for 400 response with content"
res <- fakeRes(status_code = 400, message = "test content")
actual <- suppressWarnings(.checkReturnCode(res), "test content")
stopifnot(is.null(actual))
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.