aboutsummaryrefslogtreecommitdiff
path: root/tests/npm-binary.scm
diff options
context:
space:
mode:
Diffstat (limited to 'tests/npm-binary.scm')
-rwxr-xr-xtests/npm-binary.scm146
1 files changed, 146 insertions, 0 deletions
diff --git a/tests/npm-binary.scm b/tests/npm-binary.scm
new file mode 100755
index 0000000000..cf85e572b3
--- /dev/null
+++ b/tests/npm-binary.scm
@@ -0,0 +1,146 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2024 Jelle Licht <jlicht@fsfe.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
+(define-module (test-npm-binary)
+ #:use-module ((gcrypt hash)
+ #:select ((sha256 . gcrypt-sha256)))
+ #:use-module (guix import npm-binary)
+ #:use-module (guix base32)
+ #:use-module (guix tests)
+ #:use-module (srfi srfi-64)
+ #:use-module (ice-9 iconv)
+ #:use-module (ice-9 match)
+ #:export (run-test))
+
+(define foo-json
+ "{
+ \"name\": \"foo\",
+ \"dist-tags\": {
+ \"latest\": \"1.2.3\",
+ \"next\": \"2.0.1-beta4\"
+ },
+ \"description\": \"General purpose utilities to foo your bars\",
+ \"homepage\": \"https://github.com/quartz/foo\",
+ \"repository\": \"quartz/foo\",
+ \"versions\": {
+ \"1.2.3\": {
+ \"name\": \"foo\",
+ \"description\": \"General purpose utilities to foo your bars\",
+ \"version\": \"1.2.3\",
+ \"author\": \"Jelle Licht <jlicht@fsfe.org>\",
+ \"devDependencies\": {
+ \"node-megabuilder\": \"^0.0.2\"
+ },
+ \"dependencies\": {
+ \"bar\": \"^0.1.0\"
+ },
+ \"repository\": {
+ \"url\": \"quartz/foo\"
+ },
+ \"homepage\": \"https://github.com/quartz/foo\",
+ \"license\": \"MIT\",
+ \"dist\": {
+ \"tarball\": \"https://registry.npmjs.org/foo/-/foo-1.2.3.tgz\"
+ }
+ }
+ }
+}")
+
+(define bar-json
+ "{
+ \"name\": \"bar\",
+ \"dist-tags\": {
+ \"latest\": \"0.1.2\"
+ },
+ \"description\": \"Core module in FooBar\",
+ \"homepage\": \"https://github.com/quartz/bar\",
+ \"repository\": \"quartz/bar\",
+ \"versions\": {
+ \"0.1.2\": {
+ \"name\": \"bar\",
+ \"description\": \"Core module in FooBar\",
+ \"version\": \"0.1.2\",
+ \"author\": \"Jelle Licht <jlicht@fsfe.org>\",
+ \"repository\": {
+ \"url\": \"quartz/bar\"
+ },
+ \"homepage\": \"https://github.com/quartz/bar\",
+ \"license\": \"MIT\",
+ \"dist\": {
+ \"tarball\": \"https://registry.npmjs.org/bar/-/bar-0.1.2.tgz\"
+ }
+ }
+ }
+}")
+
+(define test-source-hash
+ "")
+
+(define test-source
+ "Empty file\n")
+
+(define have-guile-semver?
+ (false-if-exception (resolve-interface '(semver))))
+
+(test-begin "npm")
+
+(unless have-guile-semver? (test-skip 1))
+(test-assert "npm-binary->guix-package"
+ (mock ((guix http-client) http-fetch
+ (lambda* (url #:rest _)
+ (match url
+ ("https://registry.npmjs.org/foo"
+ (values (open-input-string foo-json)
+ (string-length foo-json)))
+ ("https://registry.npmjs.org/bar"
+ (values (open-input-string bar-json)
+ (string-length bar-json)))
+ ("https://registry.npmjs.org/foo/-/foo-1.2.3.tgz"
+ (set! test-source-hash
+ (bytevector->nix-base32-string
+ (gcrypt-sha256 (string->bytevector test-source "utf-8"))))
+ (values (open-input-string test-source)
+ (string-length test-source))))))
+ (match (npm-binary->guix-package "foo")
+ (`(package
+ (name "node-foo")
+ (version "1.2.3")
+ (source (origin
+ (method url-fetch)
+ (uri "https://registry.npmjs.org/foo/-/foo-1.2.3.tgz")
+ (sha256
+ (base32
+ ,test-source-hash))))
+ (build-system node-build-system)
+ (arguments
+ (list #:tests? #f
+ #:phases
+ (gexp (modify-phases %standard-phases
+ (delete 'build)
+ (add-after 'patch-dependencies 'delete-dev-dependencies
+ (lambda _
+ (delete-dependencies '("node-megabuilder"))))))))
+ (inputs (list node-bar-0.1.2))
+ (home-page "https://github.com/quartz/foo")
+ (synopsis "General purpose utilities to foo your bars")
+ (description "General purpose utilities to foo your bars")
+ (license license:expat))
+ #t)
+ (x
+ (pk 'fail x #f)))))
+
+(test-end "npm")