Subject: [PATCH] gnu: python-w3lib: Fix build.
From: Felix Gruber <[email-masked]>
To: [email-masked]
Cc: Felix Gruber <[email-masked]>
Date: Sun, 3 Apr 2022 18:36:39 +0000
List-Id: <debbugs-submit.debbugs.gnu.org>

* gnu/packages/python-web.scm (python-w3lib): Fix build.
  [source]: Add python-w3lib-fix-test-failure.patch.
  [arguments]: Use pytest in the 'check phase.
  [native-inputs]: Add python-pytest.
* gnu/packages/patches/python-w3lib-fix-test-failure.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add it.
---
 gnu/local.mk                                  |  1 +
 .../python-w3lib-fix-test-failure.patch       | 60 +++++++++++++++++++
 gnu/packages/python-web.scm                   | 11 +++-
 3 files changed, 71 insertions(+), 1 deletion(-)
 create mode 100644 gnu/packages/patches/python-w3lib-fix-test-failure.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index aac7362475..6ac1ceb147 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1592,6 +1592,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/python-chai-drop-python2.patch		\
   %D%/packages/patches/python-random2-getrandbits-test.patch		\
   %D%/packages/patches/python-poppler-qt5-fix-build.patch	\
+  %D%/packages/patches/python-w3lib-fix-test-failure.patch	\
   %D%/packages/patches/sdcc-disable-non-free-code.patch		\
   %D%/packages/patches/sdl-pango-api_additions.patch		\
   %D%/packages/patches/sdl-pango-blit_overflow.patch		\
diff --git a/gnu/packages/patches/python-w3lib-fix-test-failure.patch b/gnu/packages/patches/python-w3lib-fix-test-failure.patch
new file mode 100644
index 0000000000..f38fc749df
--- /dev/null
+++ b/gnu/packages/patches/python-w3lib-fix-test-failure.patch
@@ -0,0 +1,60 @@
+From fae6cc40e112cd13697cb0e8d79976f32c72491d Mon Sep 17 00:00:00 2001
+From: Eugenio Lacuesta <[email-masked]>
+Date: Wed, 10 Mar 2021 12:31:05 -0300
+Subject: [PATCH] [CI] Mark single add_or_replace_parameter test as xfail
+
+---
+This patch is based on upstream commit
+fae6cc40e112cd13697cb0e8d79976f32c72491d which is part of
+https://github.com/scrapy/w3lib/pull/166.
+
+ .gitignore        |  3 ++-
+ tests/test_url.py | 25 ++++++++++++++-----------
+ 2 files changed, 16 insertions(+), 12 deletions(-)
+
+diff --git a/tests/test_url.py b/tests/test_url.py
+index 8b07c00..0f7458e 100644
+--- a/tests/test_url.py
++++ b/tests/test_url.py
+@@ -1,12 +1,14 @@
+-# -*- coding: utf-8 -*-
+ from __future__ import absolute_import
+ import os
+ import unittest
++
++import pytest
++from six.moves.urllib.parse import urlparse
++
+ from w3lib.url import (is_url, safe_url_string, safe_download_url,
+     url_query_parameter, add_or_replace_parameter, url_query_cleaner,
+     file_uri_to_path, parse_data_uri, path_to_file_uri, any_to_uri,
+     urljoin_rfc, canonicalize_url, parse_url, add_or_replace_parameters)
+-from six.moves.urllib.parse import urlparse
+ 
+ 
+ class UrlTests(unittest.TestCase):
+@@ -310,10 +311,6 @@ def test_add_or_replace_parameter(self):
+         self.assertEqual(add_or_replace_parameter(url, 'arg3', 'nv3'),
+                          'http://domain/test?arg1=v1&arg2=v2&arg3=nv3')
+ 
+-        url = 'http://domain/test?arg1=v1;arg2=v2'
+-        self.assertEqual(add_or_replace_parameter(url, 'arg1', 'v3'),
+-                         'http://domain/test?arg1=v3&arg2=v2')
+-
+         self.assertEqual(add_or_replace_parameter("http://domain/moreInfo.asp?prodID=", 'prodID', '20'),
+                          'http://domain/moreInfo.asp?prodID=20')
+         url = 'http://rmc-offers.co.uk/productlist.asp?BCat=2%2C60&CatID=60'
+@@ -338,6 +335,13 @@ def test_add_or_replace_parameter(self):
+         self.assertEqual(add_or_replace_parameter(url, 'arg1', 'v3'),
+                          'http://domain/test?arg1=v3&arg2=v2')
+ 
++    @pytest.mark.xfail(reason="https://github.com/scrapy/w3lib/issues/164")
++    def test_add_or_replace_parameter_fail(self):
++        self.assertEqual(
++            add_or_replace_parameter('http://domain/test?arg1=v1;arg2=v2', 'arg1', 'v3'),
++            'http://domain/test?arg1=v3&arg2=v2'
++        )
++
+     def test_add_or_replace_parameters(self):
+         url = 'http://domain/test'
+         self.assertEqual(add_or_replace_parameters(url, {'arg': 'v'}),
diff --git a/gnu/packages/python-web.scm b/gnu/packages/python-web.scm
index 41e0d1c3d6..f77d163833 100644
--- a/gnu/packages/python-web.scm
+++ b/gnu/packages/python-web.scm
@@ -49,6 +49,7 @@
 ;;; Copyright © 2021 Alice Brenon <[email-masked]>
 ;;; Copyright © 2022 John Kehayias <[email-masked]>
 ;;; Copyright © 2022 Denis 'GNUtoo' Carikli <[email-masked]>
+;;; Copyright © 2022 Felix Gruber <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -6188,12 +6189,20 @@ communicate with Microsoft Azure Storage services.")
      (origin
        (method url-fetch)
        (uri (pypi-uri "w3lib" version))
+       (patches (search-patches "python-w3lib-fix-test-failure.patch"))
        (sha256
         (base32
          "1pv02lvvmgz2qb61vz1jkjc04fgm4hpfvaj5zm4i3mjp64hd1mha"))))
     (build-system python-build-system)
+    (arguments
+     `(#:phases
+        (modify-phases %standard-phases
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (invoke "pytest")))))))
     (native-inputs
-     (list python-six))
+     (list python-pytest python-six))
     (home-page "https://github.com/scrapy/w3lib")
     (synopsis "Python library of web-related functions")
     (description
-- 
2.30.2