# Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. import io import os import textwrap import fixtures import testscenarios import testtools from openstack_requirements.cmds import edit_constraint as edit from openstack_requirements import requirement load_tests = testscenarios.load_tests_apply_scenarios class SmokeTest(testtools.TestCase): def test_make_url(self): stdout = io.StringIO() tmpdir = self.useFixture(fixtures.TempDir()).path constraints_path = os.path.join(tmpdir, 'name.txt') with open(constraints_path, 'wt') as f: f.write('bar===1\nfoo===1.0.2\nquux==3\n') rv = edit.main( [constraints_path, 'foo', '--', '-e /path/to/foo'], stdout) self.assertEqual(0, rv) content = open(constraints_path, 'rt').read() self.assertEqual('-e /path/to/foo\nbar===1\nquux==3\n', content) def test_edit_paths(self): stdout = io.StringIO() tmpdir = self.useFixture(fixtures.TempDir()).path constraints_path = os.path.join(tmpdir, 'name.txt') with open(constraints_path, 'wt') as f: f.write(textwrap.dedent("""\ file:///path/to/foo#egg=foo -e file:///path/to/bar#egg=bar """)) rv = edit.main( [constraints_path, 'foo', '--', '-e file:///path/to/foo#egg=foo'], stdout) self.assertEqual(0, rv) content = open(constraints_path, 'rt').read() self.assertEqual(textwrap.dedent("""\ -e file:///path/to/foo#egg=foo -e file:///path/to/bar#egg=bar """), content) class TestEdit(testtools.TestCase): def test_add(self): reqs = {} res = edit.edit(reqs, 'foo', 'foo==1.2') self.assertEqual(requirement.Requirements( [requirement.Requirement('', '', '', '', 'foo==1.2')]), res) def test_delete(self): reqs = requirement.parse('foo==1.2\n') res = edit.edit(reqs, 'foo', '') self.assertEqual(requirement.Requirements([]), res) def test_replace(self): reqs = requirement.parse('foo==1.2\n') res = edit.edit(reqs, 'foo', 'foo==1.3') self.assertEqual(requirement.Requirements( [requirement.Requirement('', '', '', '', 'foo==1.3')]), res) def test_replace_many(self): reqs = requirement.parse('foo==1.2;p\nfoo==1.3;q') res = edit.edit(reqs, 'foo', 'foo==1.3') self.assertEqual(requirement.Requirements( [requirement.Requirement('', '', '', '', 'foo==1.3')]), res) def test_replace_non_canonical(self): new_req = '-e file:///path#egg=foo_baz' reqs = requirement.parse("foo-baz===1.0.2\n") res = edit.edit(reqs, 'foo_baz', new_req) self.assertEqual(res, requirement.Requirements( [requirement.Requirement('', '', '', '', new_req)]))