summaryrefslogtreecommitdiff
path: root/tests/import
diff options
context:
space:
mode:
authorNicolas Graves <ngraves@ngraves.fr>2025-10-05 19:25:49 +0200
committerLudovic Courtès <ludo@gnu.org>2025-10-08 10:57:00 +0200
commit3fa75fd1524e52cabe82bc326048fcdc2eca6c6b (patch)
tree7d994a859a9dbede5a95f4738be79c2b8447f4f7 /tests/import
parentfa5ae48f055c7952dea01f7d2a29d9f31ff3eb13 (diff)
import: gem: Move tests to tests/import/gem.scm.
Follow-up forgotten in 94df3e6f28e. * tests/gem.scm: Move to tests/import/gem.scm. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
Diffstat (limited to 'tests/import')
-rw-r--r--tests/import/gem.scm309
1 files changed, 309 insertions, 0 deletions
diff --git a/tests/import/gem.scm b/tests/import/gem.scm
new file mode 100644
index 00000000000..beee1508756
--- /dev/null
+++ b/tests/import/gem.scm
@@ -0,0 +1,309 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2015 David Thompson <davet@gnu.org>
+;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
+;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
+;;; Copyright © 2022 Taiju HIGASHI <higashi@taiju.info>
+;;; Copyright © 2023 Ludovic Courtès <ludo@gnu.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-gem)
+ #:use-module (guix import gem)
+ #:use-module (guix upstream)
+ #:use-module ((guix download) #:select (url-fetch))
+ #:use-module ((guix build-system ruby) #:select (rubygems-uri))
+ #:use-module (guix base32)
+ #:use-module (gcrypt hash)
+ #:use-module (guix tests)
+ #:use-module ((guix build utils) #:select (delete-file-recursively))
+ #:use-module (srfi srfi-64)
+ #:use-module (ice-9 match))
+
+(define test-foo-json
+ "{
+ \"name\": \"foo\",
+ \"version\": \"1.0.0\",
+ \"sha\": \"f3676eafca9987cb5fe263df1edf2538bf6dafc712b30e17be3543a9680547a8\",
+ \"info\": \"A cool gem\",
+ \"homepage_uri\": \"https://example.com\",
+ \"dependencies\": {
+ \"runtime\": [
+ { \"name\": \"bundler\" },
+ { \"name\": \"bar\" }
+ ]
+ },
+ \"licenses\": [\"MIT\", \"Apache 2.0\"]
+}")
+
+(define test-foo-versions-json
+ "[{\"authors\": \" Maxim \",
+ \"built_at\": \"2012-10-24T00:00:00.000Z\",
+ \"created_at\": \"2012-11-03T07:41:49.007Z\",
+ \"description\": \"test gem\",
+ \"downloads_count\" :9195,
+ \"metadata\": {\"homepage_uri\":\"\"},
+ \"number\": \"1.0.0\",
+ \"summary\": \"foo!!!\",
+ \"platform\": \"ruby\",
+ \"rubygems_version\": \"\u003e= 0\",
+ \"ruby_version\": null,
+ \"priceless\": false,
+ \"licenses\": null,
+ \"requirements\": null,
+ \"sha\": \"523009a5b977f79c8eaa79b521e416f26482bc4fbbcc04bd08580696e303a715\",
+ \"spec_sha\": \"c7cf42bac0d01eb12b68294d1cdb4e20e7cb222ca958ad70ed1e9a686b551819\"
+}]")
+
+(define test-foo-v2-json
+ "{
+ \"name\": \"foo\",
+ \"version\": \"2.0.0\",
+ \"sha\": \"f3676eafca9987cb5fe263df1edf2538bf6dafc712b30e17be3543a9680547a8\",
+ \"info\": \"A cool gem\",
+ \"homepage_uri\": \"https://example.com\",
+ \"dependencies\": {
+ \"runtime\": [
+ { \"name\": \"bundler\" },
+ { \"name\": \"bar\" }
+ ]
+ },
+ \"licenses\": [\"MIT\", \"Apache 2.0\"]
+}")
+
+(define test-bar-json
+ "{
+ \"name\": \"bar\",
+ \"version\": \"1.0.0\",
+ \"sha\": \"f3676eafca9987cb5fe263df1edf2538bf6dafc712b30e17be3543a9680547a8\",
+ \"info\": \"Another cool gem\",
+ \"homepage_uri\": \"https://example.com\",
+ \"dependencies\": {
+ \"runtime\": [
+ { \"name\": \"bundler\" }
+ ]
+ },
+ \"licenses\": null
+}")
+
+(define test-bundler-json
+ "{
+ \"name\": \"bundler\",
+ \"version\": \"1.14.2\",
+ \"sha\": \"3bb53e03db0a8008161eb4c816ccd317120d3c415ba6fee6f90bbc7f7eec8690\",
+ \"info\": \"Ruby gem bundler\",
+ \"homepage_uri\": \"https://bundler.io/\",
+ \"dependencies\": {
+ \"runtime\": []
+ },
+ \"licenses\": [\"MIT\"]
+}")
+
+(test-begin "gem")
+
+(test-assert "gem->guix-package"
+ ;; Replace network resources with sample data.
+ (mock ((guix http-client) http-fetch
+ (lambda (url . rest)
+ (match url
+ ("https://rubygems.org/api/v1/gems/foo.json"
+ (values (open-input-string test-foo-json)
+ (string-length test-foo-json)))
+ (_ (error "Unexpected URL: " url)))))
+ (match (gem->guix-package "foo")
+ (`(package
+ (name "ruby-foo")
+ (version "1.0.0")
+ (source (origin
+ (method url-fetch)
+ (uri (rubygems-uri "foo" version))
+ (sha256
+ (base32
+ "1a270mlajhrmpqbhxcqjqypnvgrq4pgixpv3w9gwp1wrrapnwrzk"))))
+ (build-system ruby-build-system)
+ (propagated-inputs (list bundler ruby-bar))
+ (synopsis "A cool gem")
+ (description "This package provides a cool gem.")
+ (home-page "https://example.com")
+ (license (list license:expat license:asl2.0)))
+ #t)
+ (x
+ (pk 'fail x #f)))))
+
+(test-assert "gem->guix-package with a specific version"
+ ;; Replace network resources with sample data.
+ (mock ((guix http-client) http-fetch
+ (lambda (url . rest)
+ (match url
+ ("https://rubygems.org/api/v2/rubygems/foo/versions/2.0.0.json"
+ (values (open-input-string test-foo-v2-json)
+ (string-length test-foo-v2-json)))
+ (_ (error "Unexpected URL: " url)))))
+ (match (gem->guix-package "foo" #:version "2.0.0")
+ (`(package
+ (name "ruby-foo")
+ (version "2.0.0")
+ (source (origin
+ (method url-fetch)
+ (uri (rubygems-uri "foo" version))
+ (sha256
+ (base32
+ "1a270mlajhrmpqbhxcqjqypnvgrq4pgixpv3w9gwp1wrrapnwrzk"))))
+ (build-system ruby-build-system)
+ (propagated-inputs (list bundler ruby-bar))
+ (synopsis "A cool gem")
+ (description "This package provides a cool gem.")
+ (home-page "https://example.com")
+ (license (list license:expat license:asl2.0)))
+ #t)
+ (x
+ (pk 'fail x #f)))))
+
+(test-assert "gem-recursive-import"
+ ;; Replace network resources with sample data.
+ (mock ((guix http-client) http-fetch
+ (lambda (url . rest)
+ (match url
+ ("https://rubygems.org/api/v1/gems/foo.json"
+ (values (open-input-string test-foo-json)
+ (string-length test-foo-json)))
+ ("https://rubygems.org/api/v1/gems/bar.json"
+ (values (open-input-string test-bar-json)
+ (string-length test-bar-json)))
+ ("https://rubygems.org/api/v1/gems/bundler.json"
+ (values (open-input-string test-bundler-json)
+ (string-length test-bundler-json)))
+ (_ (error "Unexpected URL: " url)))))
+ (match (gem-recursive-import "foo")
+ (`((package
+ (name "ruby-bar")
+ (version "1.0.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "bar" version))
+ (sha256
+ (base32
+ "1a270mlajhrmpqbhxcqjqypnvgrq4pgixpv3w9gwp1wrrapnwrzk"))))
+ (build-system ruby-build-system)
+ (propagated-inputs (list bundler))
+ (synopsis "Another cool gem")
+ (description "Another cool gem.")
+ (home-page "https://example.com")
+ (license #f)) ;no licensing info
+ (package
+ (name "ruby-foo")
+ (version "1.0.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "foo" version))
+ (sha256
+ (base32
+ "1a270mlajhrmpqbhxcqjqypnvgrq4pgixpv3w9gwp1wrrapnwrzk"))))
+ (build-system ruby-build-system)
+ (propagated-inputs (list bundler ruby-bar))
+ (synopsis "A cool gem")
+ (description "This package provides a cool gem.")
+ (home-page "https://example.com")
+ (license (list license:expat license:asl2.0))))
+ #t)
+ (x
+ (pk 'fail x #f)))))
+
+(test-assert "gem-recursive-import with a specific version"
+ ;; Replace network resources with sample data.
+ (mock ((guix http-client) http-fetch
+ (lambda (url . rest)
+ (match url
+ ("https://rubygems.org/api/v2/rubygems/foo/versions/2.0.0.json"
+ (values (open-input-string test-foo-v2-json)
+ (string-length test-foo-v2-json)))
+ ("https://rubygems.org/api/v1/gems/bar.json"
+ (values (open-input-string test-bar-json)
+ (string-length test-bar-json)))
+ ("https://rubygems.org/api/v1/gems/bundler.json"
+ (values (open-input-string test-bundler-json)
+ (string-length test-bundler-json)))
+ (_ (error "Unexpected URL: " url)))))
+ (match (gem-recursive-import "foo" "2.0.0")
+ (`((package
+ (name "ruby-bar")
+ (version "1.0.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "bar" version))
+ (sha256
+ (base32
+ "1a270mlajhrmpqbhxcqjqypnvgrq4pgixpv3w9gwp1wrrapnwrzk"))))
+ (build-system ruby-build-system)
+ (propagated-inputs (list bundler))
+ (synopsis "Another cool gem")
+ (description "Another cool gem.")
+ (home-page "https://example.com")
+ (license #f)) ;no licensing info
+ (package
+ (name "ruby-foo")
+ (version "2.0.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "foo" version))
+ (sha256
+ (base32
+ "1a270mlajhrmpqbhxcqjqypnvgrq4pgixpv3w9gwp1wrrapnwrzk"))))
+ (build-system ruby-build-system)
+ (propagated-inputs (list bundler ruby-bar))
+ (synopsis "A cool gem")
+ (description "This package provides a cool gem.")
+ (home-page "https://example.com")
+ (license (list license:expat license:asl2.0))))
+ #t)
+ (x
+ (pk 'fail x #f)))))
+
+(test-equal "package-latest-release"
+ (list '("https://rubygems.org/downloads/foo-1.0.0.gem")
+ (list (upstream-input
+ (name "bundler")
+ (downstream-name name)
+ (type 'propagated))
+ (upstream-input
+ (name "bar")
+ (downstream-name "ruby-bar")
+ (type 'propagated))))
+ (mock ((guix http-client) http-fetch
+ (lambda (url . rest)
+ (match url
+ ("https://rubygems.org/api/v1/gems/foo.json"
+ (values (open-input-string test-foo-json)
+ (string-length test-foo-json)))
+ ("https://rubygems.org/api/v1/versions/foo.json"
+ (values (open-input-string test-foo-versions-json)
+ (string-length test-foo-versions-json)))
+ (_ (error "Unexpected URL: " url)))))
+ (let ((source (package-latest-release
+ (dummy-package "ruby-foo"
+ (version "0.1.2")
+ (source (dummy-origin
+ (method url-fetch)
+ (uri (rubygems-uri "foo"
+ version))))))))
+ (list (upstream-source-urls source)
+ (upstream-source-inputs source)))))
+
+(test-end "gem")