def testSelectedSkinHasProperCSSClass(self):
     st = getToolByName(self.folder, "portal_skins")
     skins = st.getSkinSelections()
     actions = self.menu.getMenuItems(self.folder, self.request)
     action = [a for a in actions if a["title"] == skins[0]][0]
     self.assertEqual("actionMenu", action["extra"]["class"])
     set_selected_default_skin(self.folder, skins[0])
     self.assertEqual(skins[0], get_selected_default_skin(self.folder))
     actions = self.menu.getMenuItems(self.folder, self.request)
     action = [a for a in actions if a["title"] == skins[0]][0]
     self.assertEqual("actionMenuSelected", action["extra"]["class"])
    def update(self):
        """Set selected skin as the default for the current folder."""
        context = aq_inner(self.context)
        utils = getToolByName(context, "plone_utils")

        # Which skin is requested?
        skin_name = self.request.form.get("skin_name", None)
        if skin_name is not None:
            skins_tool = getToolByName(context, 'portal_skins')
            if skin_name not in skins_tool.getSkinSelections():
                skin_name = None

        # Which skin is currently used as default skin, if any?
        current_skin = get_selected_default_skin(context)

        # Determine what needs to be done, and create or remove a
        # local site hook when needed.
        if skin_name is None and current_skin is None:
            utils.addPortalMessage(_(u"Nothing changed."))
        elif skin_name == current_skin:
            utils.addPortalMessage(_(u"Nothing changed."))
        elif skin_name is None and current_skin is not None:
            # Need to remove the hook.
            utils.addPortalMessage(_(u"No default skin selected anymore."))
            remove_hook(context)
        else:
            # The normal case: a change to the default skin.
            utils.addPortalMessage(_(u"Skin changed."))
            add_hook(context)

        # Finally set the default skin.  Note that this is safe to
        # call when skin_name is None as well, as this cleans up a
        # possible earlier setting.
        set_selected_default_skin(context, skin_name)

        return self.request.RESPONSE.redirect(context.absolute_url())