~click-hackers/click/devel

« back to all changes in this revision

Viewing changes to click/tests/test_hooks.py

When running hooks, remove hook symlinks if framework requirements are
not met (LP: #1271944).

Show diffs side-by-side

added added

removed removed

Lines of Context:
107
107
            hooks_dir = self.temp_dir
108
108
        preloads["click_get_hooks_dir"].side_effect = (
109
109
            lambda: self.make_string(hooks_dir))
 
110
        self.hooks_dir = hooks_dir
110
111
 
111
112
    def g_spawn_sync_side_effect(self, status_map, working_directory, argv,
112
113
                                 envp, flags, child_setup, user_data,
1113
1114
            self.assertFalse(os.path.lexists(unity_path))
1114
1115
            self.assertFalse(os.path.lexists(yelp_docs_path))
1115
1116
            self.assertFalse(os.path.lexists(yelp_other_path))
 
1117
 
 
1118
 
 
1119
class TestPackageHooksValidateFramework(TestClickHookBase):
 
1120
 
 
1121
    def _make_hook_file(self, hookname="test"):
 
1122
        hook_file = os.path.join(self.hooks_dir, "%s.hook" % hookname)
 
1123
        with mkfile(hook_file) as f:
 
1124
            print("User-Level: yes", file=f)
 
1125
            print("Pattern: %s/${id}.test" % self.temp_dir, file=f)
 
1126
 
 
1127
    def _make_manifest(self, package="test-1",version="1.0",
 
1128
                       framework="ubuntu-sdk-13.10",
 
1129
                       hooks=None):
 
1130
        if hooks is None:
 
1131
            hooks = {"test1-app": {"test": "target-1"}}
 
1132
        with mkfile_utf8(os.path.join(
 
1133
                self.temp_dir, package, version, ".click", "info",
 
1134
                "%s.manifest" % package)) as f:
 
1135
            json.dump({
 
1136
                "framework": framework,
 
1137
                "hooks": hooks,
 
1138
            }, f)
 
1139
        os.symlink("1.0", os.path.join(self.temp_dir, package, "current"))
 
1140
        user_db = Click.User.for_user(self.db, "test-user")
 
1141
        user_db.set_version(package, version)
 
1142
 
 
1143
    def _setup_test_env(self, preloads):
 
1144
        preloads["click_get_user_home"].return_value = "/home/test-user"
 
1145
        self._setup_hooks_dir(
 
1146
            preloads, os.path.join(self.temp_dir, "hooks"))
 
1147
        self._make_hook_file()
 
1148
        self.hook_symlink_path = os.path.join(
 
1149
            self.temp_dir, "test-1_test1-app_1.0.test")
 
1150
 
 
1151
    def test_links_are_kept_on_validate_framework(self):
 
1152
        with self.run_in_subprocess(
 
1153
                "click_get_hooks_dir", "click_get_user_home",
 
1154
                "click_get_frameworks_dir",
 
1155
                ) as (enter, preloads):
 
1156
            enter()
 
1157
            self._setup_frameworks(
 
1158
                preloads, frameworks=["ubuntu-sdk-13.10"])
 
1159
            self._setup_test_env(preloads)
 
1160
            self._make_manifest(framework="ubuntu-sdk-13.10")
 
1161
            self.assertTrue(os.path.lexists(self.hook_symlink_path))
 
1162
            # run the hooks
 
1163
            Click.run_user_hooks(self.db, user_name="test-user")
 
1164
            self.assertTrue(os.path.lexists(self.hook_symlink_path))
 
1165
 
 
1166
    def test_links_are_kept_multiple_frameworks(self):
 
1167
        with self.run_in_subprocess(
 
1168
                "click_get_hooks_dir", "click_get_user_home",
 
1169
                "click_get_frameworks_dir",
 
1170
                ) as (enter, preloads):
 
1171
            enter()
 
1172
            self._setup_frameworks(
 
1173
                preloads, frameworks=["ubuntu-sdk-14.04", "ubuntu-sdk-13.10"])
 
1174
            self._setup_test_env(preloads)
 
1175
            self._make_manifest(framework="ubuntu-sdk-13.10")
 
1176
            self.assertTrue(os.path.lexists(self.hook_symlink_path))
 
1177
            # run the hooks
 
1178
            Click.run_user_hooks(self.db, user_name="test-user")
 
1179
            self.assertTrue(os.path.lexists(self.hook_symlink_path))
 
1180
 
 
1181
    def test_links_are_removed_on_missng_framework(self):
 
1182
        with self.run_in_subprocess(
 
1183
                "click_get_hooks_dir", "click_get_user_home",
 
1184
                "click_get_frameworks_dir",
 
1185
                ) as (enter, preloads):
 
1186
            enter()
 
1187
            self._setup_frameworks(preloads, frameworks=["missing"])
 
1188
            self._setup_test_env(preloads)
 
1189
            self._make_manifest(framework="ubuntu-sdk-13.10")
 
1190
            self.assertTrue(os.path.lexists(self.hook_symlink_path))
 
1191
            # run the hooks
 
1192
            Click.run_user_hooks(self.db, user_name="test-user")
 
1193
            self.assertFalse(os.path.lexists(self.hook_symlink_path))
 
1194
 
 
1195
    def test_links_are_removed_on_missng_multiple_framework(self):
 
1196
        with self.run_in_subprocess(
 
1197
                "click_get_hooks_dir", "click_get_user_home",
 
1198
                "click_get_frameworks_dir",
 
1199
                ) as (enter, preloads):
 
1200
            enter()
 
1201
            self._setup_frameworks(preloads, frameworks=["ubuntu-sdk-13.10"])
 
1202
            self._setup_test_env(preloads)
 
1203
            self._make_manifest(
 
1204
                framework="ubuntu-sdk-13.10,ubuntu-sdk-13.10-html")
 
1205
            self.assertTrue(os.path.lexists(self.hook_symlink_path))
 
1206
            # run the hooks
 
1207
            Click.run_user_hooks(self.db, user_name="test-user")
 
1208
            self.assertFalse(os.path.lexists(self.hook_symlink_path))