Skip to content
代码片段 群组 项目
未验证 提交 602495d3 编辑于 作者: Anna Vovchenko's avatar Anna Vovchenko 提交者: GitLab
浏览文件

Merge branch 'user-profile-achievements' into 'master'

No related branches found
No related tags found
无相关合并请求
...@@ -7,6 +7,8 @@ import { TYPENAME_USER } from '~/graphql_shared/constants'; ...@@ -7,6 +7,8 @@ import { TYPENAME_USER } from '~/graphql_shared/constants';
import timeagoMixin from '~/vue_shared/mixins/timeago'; import timeagoMixin from '~/vue_shared/mixins/timeago';
import getUserAchievements from './graphql/get_user_achievements.query.graphql'; import getUserAchievements from './graphql/get_user_achievements.query.graphql';
export const MAX_VISIBLE_ACHIEVEMENTS = 7;
export default { export default {
name: 'UserAchievements', name: 'UserAchievements',
components: { GlAvatar, GlBadge, GlPopover, GlSprintf }, components: { GlAvatar, GlBadge, GlPopover, GlSprintf },
...@@ -36,7 +38,7 @@ export default { ...@@ -36,7 +38,7 @@ export default {
methods: { methods: {
processNodes(nodes) { processNodes(nodes) {
return Object.entries(groupBy(nodes, 'achievement.id')) return Object.entries(groupBy(nodes, 'achievement.id'))
.slice(0, 3) .slice(0, MAX_VISIBLE_ACHIEVEMENTS)
.map(([id, values]) => { .map(([id, values]) => {
const { const {
achievement: { name, avatarUrl, description, namespace }, achievement: { name, avatarUrl, description, namespace },
......
...@@ -56,9 +56,8 @@ ...@@ -56,9 +56,8 @@
context 'for user achievements' do context 'for user achievements' do
let_it_be(:group) { create(:group, :public) } let_it_be(:group) { create(:group, :public) }
let_it_be(:private_group) { create(:group, :private) } let_it_be(:private_group) { create(:group, :private) }
let_it_be(:achievement1) { create(:achievement, namespace: group, name: 'Multiple') } let_it_be(:multiple_achievement) { create(:achievement, namespace: group, name: 'Multiple') }
let_it_be(:achievement2) { create(:achievement, namespace: group) } let_it_be(:achievements) { create_list(:achievement, 6, namespace: group) }
let_it_be(:achievement3) { create(:achievement, namespace: group) }
let_it_be(:achievement_from_private_group) { create(:achievement, namespace: private_group) } let_it_be(:achievement_from_private_group) { create(:achievement, namespace: private_group) }
let_it_be(:achievement_with_avatar_and_description) do let_it_be(:achievement_with_avatar_and_description) do
create(:achievement, create(:achievement,
...@@ -89,7 +88,7 @@ ...@@ -89,7 +88,7 @@
end end
it "graphql/get_user_achievements_without_avatar_or_description_response.json" do it "graphql/get_user_achievements_without_avatar_or_description_response.json" do
create(:user_achievement, user: user, achievement: achievement1) create(:user_achievement, user: user, achievement: multiple_achievement)
post_graphql(query, current_user: user, variables: { id: user.to_global_id }) post_graphql(query, current_user: user, variables: { id: user.to_global_id })
...@@ -105,10 +104,11 @@ ...@@ -105,10 +104,11 @@
end end
it "graphql/get_user_achievements_long_response.json" do it "graphql/get_user_achievements_long_response.json" do
[achievement1, achievement2, achievement3, achievement_with_avatar_and_description].each do |achievement| [
multiple_achievement, multiple_achievement, achievement_with_avatar_and_description, *achievements
].each do |achievement|
create(:user_achievement, user: user, achievement: achievement) create(:user_achievement, user: user, achievement: achievement)
end end
create(:user_achievement, user: user, achievement: achievement1)
post_graphql(query, current_user: user, variables: { id: user.to_global_id }) post_graphql(query, current_user: user, variables: { id: user.to_global_id })
......
...@@ -8,7 +8,9 @@ import getUserAchievementsPrivateGroupResponse from 'test_fixtures/graphql/get_u ...@@ -8,7 +8,9 @@ import getUserAchievementsPrivateGroupResponse from 'test_fixtures/graphql/get_u
import getUserAchievementsNoAvatarResponse from 'test_fixtures/graphql/get_user_achievements_without_avatar_or_description_response.json'; import getUserAchievementsNoAvatarResponse from 'test_fixtures/graphql/get_user_achievements_without_avatar_or_description_response.json';
import createMockApollo from 'helpers/mock_apollo_helper'; import createMockApollo from 'helpers/mock_apollo_helper';
import waitForPromises from 'helpers/wait_for_promises'; import waitForPromises from 'helpers/wait_for_promises';
import UserAchievements from '~/profile/components/user_achievements.vue'; import UserAchievements, {
MAX_VISIBLE_ACHIEVEMENTS,
} from '~/profile/components/user_achievements.vue';
import getUserAchievements from '~/profile/components//graphql/get_user_achievements.query.graphql'; import getUserAchievements from '~/profile/components//graphql/get_user_achievements.query.graphql';
import { getTimeago, timeagoLanguageCode } from '~/lib/utils/datetime_utility'; import { getTimeago, timeagoLanguageCode } from '~/lib/utils/datetime_utility';
import { mountExtended } from 'helpers/vue_test_utils_helper'; import { mountExtended } from 'helpers/vue_test_utils_helper';
...@@ -56,12 +58,15 @@ describe('UserAchievements', () => { ...@@ -56,12 +58,15 @@ describe('UserAchievements', () => {
expect(wrapper.findAllByTestId('user-achievement').length).toBe(0); expect(wrapper.findAllByTestId('user-achievement').length).toBe(0);
}); });
it('only renders 3 achievements when more are present', async () => { it(`only renders ${MAX_VISIBLE_ACHIEVEMENTS} achievements when more are present`, async () => {
createComponent({ queryHandler: jest.fn().mockResolvedValue(getUserAchievementsLongResponse) }); createComponent({ queryHandler: jest.fn().mockResolvedValue(getUserAchievementsLongResponse) });
await waitForPromises(); await waitForPromises();
expect(wrapper.findAllByTestId('user-achievement').length).toBe(3); expect(getUserAchievementsLongResponse.data.user.userAchievements.nodes.length).toBeGreaterThan(
MAX_VISIBLE_ACHIEVEMENTS,
);
expect(wrapper.findAllByTestId('user-achievement').length).toBe(MAX_VISIBLE_ACHIEVEMENTS);
}); });
it('renders count for achievements awarded more than once', async () => { it('renders count for achievements awarded more than once', async () => {
......
0% 加载中 .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册