def test_dashboard_tags(self):
        strategy = DashboardTagsStrategy(['tag1'])

        result = sorted(strategy.get_urls())
        expected = []
        self.assertEqual(result, expected)

        # tag dashboard 3 with `tag1`
        tag1 = get_tag('tag1', db.session, TagTypes.custom)
        object_id = 3
        tagged_object = TaggedObject(
            tag_id=tag1.id,
            object_id=object_id,
            object_type=ObjectTypes.dashboard,
        )
        db.session.add(tagged_object)
        db.session.commit()

        result = sorted(strategy.get_urls())
        expected = [
            f'{TEST_URL}/?form_data=%7B%27slice_id%27%3A+31%7D',
        ]
        self.assertEqual(result, expected)

        strategy = DashboardTagsStrategy(['tag2'])

        result = sorted(strategy.get_urls())
        expected = []
        self.assertEqual(result, expected)

        # tag chart 30 with `tag2`
        tag2 = get_tag('tag2', db.session, TagTypes.custom)
        object_id = 30
        tagged_object = TaggedObject(
            tag_id=tag2.id,
            object_id=object_id,
            object_type=ObjectTypes.chart,
        )
        db.session.add(tagged_object)
        db.session.commit()

        result = sorted(strategy.get_urls())
        expected = [
            f'{TEST_URL}/?form_data=%7B%27slice_id%27%3A+30%7D',
        ]
        self.assertEqual(result, expected)

        strategy = DashboardTagsStrategy(['tag1', 'tag2'])

        result = sorted(strategy.get_urls())
        expected = [
            f'{TEST_URL}/?form_data=%7B%27slice_id%27%3A+30%7D',
            f'{TEST_URL}/?form_data=%7B%27slice_id%27%3A+31%7D',
        ]
        self.assertEqual(result, expected)
    def test_dashboard_tags(self):
        tag1 = get_tag("tag1", db.session, TagTypes.custom)
        # delete first to make test idempotent
        self.reset_tag(tag1)

        strategy = DashboardTagsStrategy(["tag1"])
        result = sorted(strategy.get_urls())
        expected = []
        self.assertEqual(result, expected)

        # tag dashboard 'births' with `tag1`
        tag1 = get_tag("tag1", db.session, TagTypes.custom)
        dash = self.get_dash_by_slug("births")
        tag1_urls = sorted([f"{URL_PREFIX}{slc.url}" for slc in dash.slices])
        tagged_object = TaggedObject(tag_id=tag1.id,
                                     object_id=dash.id,
                                     object_type=ObjectTypes.dashboard)
        db.session.add(tagged_object)
        db.session.commit()

        self.assertEqual(sorted(strategy.get_urls()), tag1_urls)

        strategy = DashboardTagsStrategy(["tag2"])
        tag2 = get_tag("tag2", db.session, TagTypes.custom)
        self.reset_tag(tag2)

        result = sorted(strategy.get_urls())
        expected = []
        self.assertEqual(result, expected)

        # tag first slice
        dash = self.get_dash_by_slug("unicode-test")
        slc = dash.slices[0]
        tag2_urls = [f"{URL_PREFIX}{slc.url}"]
        object_id = slc.id
        tagged_object = TaggedObject(tag_id=tag2.id,
                                     object_id=object_id,
                                     object_type=ObjectTypes.chart)
        db.session.add(tagged_object)
        db.session.commit()

        result = sorted(strategy.get_urls())
        self.assertEqual(result, tag2_urls)

        strategy = DashboardTagsStrategy(["tag1", "tag2"])

        result = sorted(strategy.get_urls())
        expected = sorted(tag1_urls + tag2_urls)
        self.assertEqual(result, expected)
Example #3
0
def upgrade():
    bind = op.get_bind()
    session = db.Session(bind=bind)

    Tag.__table__.create(bind)
    TaggedObject.__table__.create(bind)

    # add type tags (eg, `type:dashboard` for dashboards)
    for type in ObjectTypes.__members__:
        session.add(Tag(name='type:{0}'.format(type), type=TagTypes.type))

    # add owner tags (eg, `owner:1` for things owned by the admin)
    for chart in session.query(Slice):
        for owner in chart.owners:
            name = 'owner:{0}'.format(owner.id)
            tag = get_tag(name, session, TagTypes.owner)
            tagged_object = TaggedObject(
                tag_id=tag.id,
                object_id=chart.id,
                object_type=ObjectTypes.chart,
            )
            session.add(tagged_object)

        tag = get_tag('type:chart', session, TagTypes.type)
        tagged_object = TaggedObject(
            tag_id=tag.id,
            object_id=chart.id,
            object_type=ObjectTypes.chart,
        )
        session.add(tagged_object)

    for dashboard in session.query(Dashboard):
        for owner in dashboard.owners:
            name = 'owner:{0}'.format(owner.id)
            tag = get_tag(name, session, TagTypes.owner)
            tagged_object = TaggedObject(
                tag_id=tag.id,
                object_id=dashboard.id,
                object_type=ObjectTypes.dashboard,
            )
            session.add(tagged_object)

        tag = get_tag('type:dashboard', session, TagTypes.type)
        tagged_object = TaggedObject(
            tag_id=tag.id,
            object_id=dashboard.id,
            object_type=ObjectTypes.dashboard,
        )
        session.add(tagged_object)

    for query in session.query(SavedQuery):
        name = 'owner:{0}'.format(query.user_id)
        tag = get_tag(name, session, TagTypes.owner)
        tagged_object = TaggedObject(
            tag_id=tag.id,
            object_id=query.id,
            object_type=ObjectTypes.query,
        )
        session.add(tagged_object)

        tag = get_tag('type:query', session, TagTypes.type)
        tagged_object = TaggedObject(
            tag_id=tag.id,
            object_id=query.id,
            object_type=ObjectTypes.query,
        )
        session.add(tagged_object)

    # add favorited_by tags
    for star in session.query(Favstar):
        name = 'favorited_by:{0}'.format(star.user_id)
        tag = get_tag(name, session, TagTypes.favorited_by)
        tagged_object = TaggedObject(
            tag_id=tag.id,
            object_id=star.obj_id,
            object_type=get_object_type(star.class_name),
        )
        session.add(tagged_object)

    session.commit()