def test_get_package(self): package_a = MyPackage(self.TMP_DIR, "packagea") SetupCfg(package_a.full_name).write(package_a.package_dir) with chdir(self.TMP_DIR): Package(package_name=package_a.full_name) Package(package_dir=package_a.package_dir)
def test_no_changed_packages(self): with chdir(self.TMP_DIR): parent_branch = detect_changed_packages.get_parent_branch() changed_files = detect_changed_packages.get_changed_files( parent_branch) self.assertEqual(changed_files, [], parent_branch)
def test_install_with_packages_created(self): cmd = ["scream", "new", "com.packagea"] with chdir(self.TMP_DIR): # Add a package. with mock.patch.object(sys, "argv", cmd): with self.assertRaises(SystemExit) as err: scream.Scream() self.assertEqual(err.exception.code, 0) subprocess.call(["git", "add", "."]) with chdir(self.TMP_DIR): with mock.patch.object(sys, "argv", self.cmd): with self.assertRaises(SystemExit) as err: scream.Scream() self.assertEqual(err.exception.code, 0)
def test_get_configs(self): package_a = MyPackage(self.TMP_DIR, "packagea") with chdir(self.TMP_DIR): os.mkdir(package_a.name) SetupCfg(package_a.full_name).write(package_a.package_dir) self.assertIsInstance(MockPackage().get_cfg(package_a.package_dir), configparser.ConfigParser)
def setUp(cls): super(TestPackages, cls).setUp() # Create a fake package that's available to test. with chdir(cls.TMP_DIR): package_a = MyPackage(d=cls.TMP_DIR, name="packagea") os.mkdir(package_a.name) SetupCfg(package_a.full_name).write(package_a.package_dir) subprocess.call(["git", "add", "."])
def test_test_no_packages_created(self): cmds = [self.test, self.test_package, self.test_all, self.test_dry] with chdir(self.TMP_DIR): for cmd in cmds: with mock.patch.object(sys, "argv", cmd): with self.assertRaises(SystemExit) as err: scream.Scream() self.assertEqual(err.exception.code, 0)
def test_get_package_doesnt_exist(self): """Test both ways to initialize """ package_a = MyPackage(self.TMP_DIR, "packagea") with chdir(self.TMP_DIR): with self.assertRaises(PackageDoesNotExistException): Package(package_name=package_a.full_name).get_dependents( package_a.package_dir) with self.assertRaises(PackageDoesNotExistException): Package(package_dir=package_a.package_dir).get_dependents( package_a.package_dir)
def test_resolve_dependencies_depends_on_itself(self): package_a = MyPackage(self.TMP_DIR, "packagea") SetupCfg(package_a.full_name, dependencies=[package_a.full_name ]).write(package_a.package_dir) with chdir(self.TMP_DIR): with self.assertRaises(SystemExit) as err: Package(package_name=package_a.full_name).get_dependents( package_a.package_dir) self.assertTrue('is dependent on itself' in err.exception.args[0])
def setUp(cls): super(Base.TestNewMonorepoGitInit, cls).setUp() with chdir(cls.TMP_DIR): scream.init_monorepo( cls.TMP_DIR ) # This is tested directly in integration_tests/test_cli.py # The user is required to setup git to get the most out of `scream test` and `scream build`. subprocess.call( ["git", "config", "user.email", "*****@*****.**"]) subprocess.call(["git", "config", "user.name", "Ryan Kelly"]) subprocess.call(["git", "add", "."]) subprocess.call(["git", "commit", "-m", "init monorepo!"])
def test_cmd_b4_init_monorepo(self): test_command = ["scream", "test"] new_command = ["scream", "new", "company.packagea"] install_command = ["scream", "install", "company_packagea"] cmds = [test_command, new_command, install_command] with chdir(self.TMP_DIR): for cmd in cmds: with mock.patch.object(sys, "argv", cmd): with self.assertRaises(SystemExit) as err: scream.Scream() self.assertEqual(err.exception.code, 1)
def test_changed_packages_ignore_changes(self): input_changes = [["A", "packagea/README.md"]] expected_changes = {} with chdir(self.TMP_DIR): _dir = "packagea" file_name = "README.md" File(file_name, "# New readme change!").write(_dir) subprocess.call(["git", "add", "."]) changed_packages = detect_changed_packages.get_unique_changed_packages( input_changes) self.assertEqual(changed_packages, expected_changes)
def test_changed_files(self): expected_changes = [['A', 'packagea/setup.cfg']] with chdir(self.TMP_DIR): package_a = MyPackage(d=self.TMP_DIR, name="packagea") os.mkdir(package_a.name) SetupCfg(package_a.full_name).write(package_a.package_dir) subprocess.call(["git", "add", "."]) parent_branch = detect_changed_packages.get_parent_branch() changed_files = detect_changed_packages.get_changed_files( parent_branch) self.assertEqual(changed_files, expected_changes, parent_branch)
def test_resolve_circular_dependencies(self): package_b = MyPackage(self.TMP_DIR, "packageb") package_a = MyPackage(self.TMP_DIR, "packagea") SetupCfg(package_a.full_name, dependencies=[package_b.full_name ]).write(package_a.package_dir) SetupCfg(package_b.full_name, dependencies=[package_a.full_name ]).write(package_b.package_dir) with chdir(self.TMP_DIR): with self.assertRaises(SystemExit) as err: Package(package_name=package_a.full_name).get_dependents( package_a.package_dir) self.assertTrue( "Circular dependency detected!" in err.exception.args[0])
def test_changed_packages(self): input_changes = [["A", "packagea/module.py"]] expected_changes = "company_packagea" with chdir(self.TMP_DIR): package_a = MyPackage(d=self.TMP_DIR, name="packagea") os.mkdir(package_a.name) SetupCfg(package_a.full_name).write(package_a.package_dir) subprocess.call(["git", "add", "."]) changed_packages = detect_changed_packages.get_unique_changed_packages( input_changes) changed_package = list(changed_packages.keys())[0] self.assertEqual(changed_package, expected_changes)
def test_test_commands(self): cmds_and_expected_output = [({ "package_name": None }, ['tox', '-e', 'py36-company_packagea']), ({ "package_name": None, "dry_run": True }, None), ({ "all": True }, ['tox']), ({ "package_name": "packagea" }, ['tox', '-e', 'packagea']), ({ "package_name": "packagea", "all": True }, ['tox', '-e', 'packagea'])] with chdir(self.TMP_DIR): for cmd, expected in cmds_and_expected_output: test_cmd = build_test_cmd(**cmd) self.assertEqual(test_cmd, expected)
def new(self): parser = argparse.ArgumentParser() parser.add_argument('package_name') args = parser.parse_args(sys.argv[2:]) try: namespaces, package_name = validate_package_name(args.package_name) except PackageNamingException as err: sys.exit(err) d = os.path.join(self.monorepo.root_dir, package_name) if os.path.exists(d): logging.info('Directory `{}` already exists.'.format(d)) sys.exit(1) os.makedirs(d) with utils.chdir(d, cwd=self.monorepo.root_dir): new_package(d, namespaces, package_name) logging.info('Created project `{}`'.format(args.package_name)) self.monorepo.sync()
def test_resolve_dependencies(self): package_c = MyPackage(self.TMP_DIR, "packagec") package_b = MyPackage(self.TMP_DIR, "packageb") package_a = MyPackage(self.TMP_DIR, "packagea") SetupCfg(package_a.full_name, dependencies=[package_b.full_name, package_c.full_name ]).write(package_a.package_dir) SetupCfg(package_b.full_name, dependencies=[package_c.full_name ]).write(package_b.package_dir) SetupCfg(package_c.full_name).write(package_c.package_dir) with chdir(self.TMP_DIR): a_dependencies = Package( package_name=package_a.full_name).get_dependents( package_a.package_dir) self.assertEqual(a_dependencies[0].package_name, "company_packageb") self.assertEqual(a_dependencies[1].package_name, "company_packagec")
def test_get_parent_no_parent(self): with chdir(self.TMP_DIR): self.assertEqual(detect_changed_packages.get_parent_branch(), "master")
def test_scream_test_gracefully_handle_no_git(self): with chdir(self.TMP_DIR): with mock.patch.object(sys, "argv", ["scream", "test"]): with self.assertRaises(SystemExit): scream.Scream()
def test_init_monorepo(self): with chdir(self.TMP_DIR): with mock.patch.object(sys, "argv", ["scream", "init"]): with self.assertRaises(SystemExit) as err: scream.Scream() self.assertEqual(err.exception.code, 0)
def test_new_package(self): with chdir(self.TMP_DIR): with mock.patch.object(sys, "argv", self.cmd): with self.assertRaises(SystemExit) as err: scream.Scream() self.assertEqual(err.exception.code, 0)
def test_get_parent_branch(self): with chdir(self.TMP_DIR): subprocess.call(["git", "checkout", "-b", "otherbranch"]) self.assertEqual(detect_changed_packages.get_parent_branch(), "master")