JavaRush /جاوا بلاگ /Random-SD /اسان مضمونن جي هڪ گروپ ۾ رڪنيت حاصل ڪرڻ جي صلاحيت شامل ڪر...

اسان مضمونن جي هڪ گروپ ۾ رڪنيت حاصل ڪرڻ جي صلاحيت شامل ڪري رهيا آهيون. (حصو 1) - "جاوا پروجيڪٽ A کان Z تائين"

گروپ ۾ شايع ٿيل
سلام! اڄ اسان جاوا رش ۾ آرٽيڪلز جي گروپ ۾ رڪنيت شامل ڪنداسين. اهو GitHub تي JRTB-5 جاري ڪرڻ سان مطابقت رکي ٿو . مون کي وضاحت ڪرڻ ڏيو: JavaRush وٽ آرٽيڪلز نالي هڪ سيڪشن آهي ، ۽ ان ۾ آرٽيڪلز جا گروپ آهن . خيال اهو آهي ته ٽيليگرام بوٽ ذريعي هڪ يا وڌيڪ گروپن کان نئين آرٽيڪل بابت اطلاعون حاصل ڪرڻ."جاوا پروجيڪٽ A کان Z تائين": مضمونن جي هڪ گروپ ۾ رڪنيت حاصل ڪرڻ جي صلاحيت شامل ڪرڻ.  حصو 1 - 1

شامل ڪريو JRTB-5

اچو ته چئو ته مان مضمونن ۾ دلچسپي وٺان ٿو ڪامياب ڪهاڻيون گروپ . تنهن ڪري، مان چاهيان ٿو ته هن گروپ جي تازه ڪارين جي رڪنيت حاصل ڪرڻ ۽ هر وقت نئين اشاعت جي لنڪ حاصل ڪرڻ چاهيان ٿو. هن ڪم جي حصي جي طور تي، اسان کي سکڻ جي ضرورت آهي ته ڪيئن استعمال ڪجي کليل API جاوا رش ۾ گروپن سان ڪم ڪرڻ لاءِ. بس هن وقت اهڙي شيء اچي وئي. هتي کليل API جي وضاحت لاءِ هڪ لنڪ آهي .
دوستو! ڇا توھان فوري طور تي ڄاڻڻ چاھيو ٿا جڏھن ھڪڙي منصوبي لاء نئون ڪوڊ يا ھڪڙو نئون مضمون جاري ڪيو وڃي؟ منهنجي ٽي جي چينل ۾ شامل ٿيو . اتي آئون گڏ ڪري پنهنجا آرٽيڪل، سوچون ۽ اوپن سورس ڊولپمينٽ گڏ ڪريان ٿو.

swagger ڇا آهي؟ اچو ته ان کي هاڻي سمجهون

اسان اڃا تائين ٻرندڙ جي باري ۾ نه ڳالهايو آهي. انهن لاءِ جيڪي نه ڄاڻندا آهن، مان مختصر طور تي وضاحت ڪندس: هي هڪ جڳهه آهي جتي توهان کليل طور تي سرور جي API کي ڏسي سگهو ٿا ۽ ان لاءِ ڪجهه درخواستون ڪرڻ جي ڪوشش ڪري سگهو ٿا. عام طور تي، هڪ swagger گروپ ممڪن درخواستون. اسان جي صورت ۾، ٽي گروپ آهن: فورم-سوال ، گروپ ، پوسٽ . هر گروهه ۾ هڪ يا وڌيڪ درخواستون هونديون جيڪي هن درخواست کي ٺاهڻ لاءِ سڀني ضروري ڊيٽا کي ظاهر ڪن ٿيون (يعني، ڪهڙا اضافي پيٽرول پاس ڪري سگهجن ٿا، انهن سان ڇا ڪجي، ڪهڙو http طريقو، وغيره). مان توهان کي صلاح ڏيان ٿو ته هن موضوع تي وڌيڪ پڙهو ۽ ڏسو، ڇو ته هي ترقي جو حصو آهي جيڪو توهان مان هر هڪ کي منهن ڏيندو. ان کي سمجهڻ لاءِ، اچو ته معلوم ڪريون ته جاوا رش ۾ ڪيترا گروپ آهن. هن کي ڪرڻ لاءِ، گروپ ڪنٽرولر گروپ کي وڌايو ۽ چونڊيو Get request /api/1.0/rest/groups/count . اهو اسان کي JavaRush ۾ گروپن جو تعداد واپس ڏيندو. اچو ته ڏسو: "جاوا پروجيڪٽ A کان Z تائين": مضمونن جي هڪ گروپ ۾ رڪنيت حاصل ڪرڻ جي صلاحيت شامل ڪرڻ.  حصو 1 - 2تصوير ڏيکاري ٿي ته هي سوال ڪيترن ئي پيٽرولن کي سپورٽ ڪري ٿو (سوال، قسم، فلٽر). ھن درخواست کي آزمائڻ لاءِ، توھان کي ڳولڻو پوندو ڪوشش ڪريو"جاوا پروجيڪٽ A کان Z تائين": مضمونن جي هڪ گروپ ۾ رڪنيت حاصل ڪرڻ جي صلاحيت شامل ڪرڻ.  حصو 1 - 3 بٽڻ گروپ). پر هاڻي لاءِ، اچو ته ان کي بغير ڪنهن پابندي جي هلون ۽ ڏسو ته جاوا رش ۾ ڪيترا گروپ آهن. هن کي ڪرڻ لاء، تي ڪلڪ ڪريو Execute. هيٺ ڏنل جواب هوندو (سرور جي جواب واري حصي ۾) هن درخواست تي: اسان ڏسون ٿا ته مجموعي طور تي 30"جاوا پروجيڪٽ A کان Z تائين": مضمونن جي هڪ گروپ ۾ رڪنيت حاصل ڪرڻ جي صلاحيت شامل ڪرڻ.  حصو 1 - 4 گروپ آهن ، اها درخواست 95ms ۾ مڪمل ڪئي وئي ۽ جواب ۾ ڪجهه هيڊرن جو هڪ سيٽ آهي. اڳيون، اچو ته ڪجھ پيٽرولر کي ترتيب ڏيڻ جي ڪوشش ڪريو. اچو ته COMPANY جي قيمت جي برابر ٽائيپ پيراميٽر چونڊيو ۽ ڏسو ته نتيجو ڪيئن بدلجي ٿو: انهن مان 4 آهن. ان کي ڪيئن چيڪ ڪجي؟ اهو آسان آهي: توهان ويب سائيٽ تي وڃو، آرٽيڪل سيڪشن ڳوليو، سڀئي گروپ چونڊيو ۽ اتي مناسب فلٽر شامل ڪريو ( https://javarush.com/groups/all?type=COMPANY ). ۽ ها، حقيقت ۾، انهن مان صرف 4 آهن، جيتوڻيڪ اتي اصل ۾ ٽي آهن:D اڃا تائين اهو مناسب آهي. رستي ۾، جيڪڏهن اسان يونيورسٽين کي چيڪ ڪريو، اتي اڃا تائين ڪو به ناهي. صرف تفريح لاءِ، ڏسو ته ڇا ٿيندو جيڪڏهن توهان filter = MY هڪ برائوزر ۾ سيٽ ڪيو جتي توهان Javarush ۾ لاگ ان ٿيل آهيو ۽ لاگ ان ٿيل نه آهيو. swagger بابت وڌيڪ - هن مضمون ۾ Habré تي ."جاوا پروجيڪٽ A کان Z تائين": مضمونن جي هڪ گروپ ۾ رڪنيت حاصل ڪرڻ جي صلاحيت شامل ڪرڻ.  حصو 1 - 5"جاوا پروجيڪٽ A کان Z تائين": مضمونن جي هڪ گروپ ۾ رڪنيت حاصل ڪرڻ جي صلاحيت شامل ڪرڻ.  حصو 1 - 6

گروپن لاءِ Javarush API لاءِ ڪلائنٽ لکڻ

ھاڻي، کليل API جي بنياد تي، اسان ھڪڙو جاوا ڪلائنٽ لکنداسين جيڪو درخواستون ڪري سگھي ٿو، جواب حاصل ڪري سگھي ٿو ۽ ڄاڻندو آھي ته ڪھڙي شئي پھچندي. اسان به شيون کڻنداسين swagger مان، ماڊل سيڪشن مان (صفحي جي بلڪل هيٺان). اچو ته هڪ نئون پيڪيج ٺاهيو ۽ ان کي سڏين javarushclient اڳيان خدمت، مخزن. مستقبل ۾، اسان هن کي Javarush Community تنظيم جي اندر هڪ الڳ لائبريري ۾ منتقل ڪنداسين ۽ ان کي خاص طور تي انحصار طور استعمال ڪنداسين.
مون اڳ ۾ ئي آرٽيڪل ۾ جاوا ڪلائنٽ ٺاهڻ جي باري ۾ لکيو آهي “اسڪائي اسڪينر API لاءِ ڪلائنٽ ٺاهڻ ۽ ان کي jCenter ۽ Maven Central ۾ شايع ڪرڻ تي گائيڊ” .
سڀ کان پهريان، توهان کي شامل ڪرڻ جي ضرورت آهي Unitrest، JavaRush API ڏانهن http درخواستون ٺاهڻ لاءِ هڪ لائبريري:
<dependency>
  <groupId>com.konghq</groupId>
  <artifactId>unirest-java</artifactId>
  <version>${unirest.version}</version>
</dependency>
۽ ورجن کي پراپرٽيز بلاڪ ۾ رکو:
<unirest.version>3.11.01</unirest.version>
هڪ دفعو اسان وٽ انحصار آهي، اسان ڪوڊ شامل ڪرڻ شروع ڪري سگهون ٿا. اچو ته JavaRushGroupClient گروپن لاءِ ڪلائنٽ ٺاهيون ۽ JavaRushGroupClientImpl ڪلاس ۾ هڪ عمل درآمد ڪريون. پر پهريان توهان کي ڊي ٽي اوز ٺاهڻ جي ضرورت آهي (ڊيٽا ٽرانسفر آبجڪس) - اهو آهي، طبقن جن جون شيون ڪلائنٽ لاءِ تمام ضروري ڊيٽا کڻنديون. سڀ ماڊلز swagger ۾ ڏسي سگھجن ٿا، بلڪل ھيٺان ھڪڙو سيڪشن آھي Models ، جنھن ۾ توھان انھن کي شمار ڪري سگھو ٿا. ھي اھو آھي جيڪو GroupDiscussionInfo swagger ۾ ڏسڻ ۾ اچي ٿو: javarushclient پيڪيج ۾، اسان ھڪڙو dto"جاوا پروجيڪٽ A کان Z تائين": مضمونن جي هڪ گروپ ۾ رڪنيت حاصل ڪرڻ جي صلاحيت شامل ڪرڻ.  حصو 1 - 7 پيڪيج ٺاھينداسين ، جنھن ۾ اسين شامل ڪنداسين، swagger جي ڊيٽا جي بنياد تي، ھيٺيون ڪلاس:
  • MeGroupInfoStatus :

    package com.github.javarushcommunity.jrtb.javarushclient.dto;
    
    /**
    * Member group status.
    */
    public enum MeGroupInfoStatus {
       UNKNOWN, CANDIDATE, INVITEE, MEMBER, EDITOR, MODERATOR, ADMINISTRATOR, BANNED
    }

  • مي گروپ ڄاڻ :

    package com.github.javarushcommunity.jrtb.javarushclient.dto;
    
    import lombok.Data;
    
    /**
    * Group information related to authorized user. If there is no user - will be null.
    */
    @Data
    public class MeGroupInfo {
       private MeGroupInfoStatus status;
       private Integer userGroupId;
    }

  • گروپ ڄاڻ جو قسم :

    package com.github.javarushcommunity.jrtb.javarushclient.dto;
    
    /**
    * Group Info type;
    */
    public enum GroupInfoType {
       UNKNOWN, CITY, COMPANY, COLLEGE, TECH, SPECIAL, COUNTRY
    }

  • استعمال ڪندڙ جي بحث جي ڄاڻ :

    package com.github.javarushcommunity.jrtb.javarushclient.dto;
    
    import lombok.Data;
    
    /**
    * DTO for User discussion info.
    */
    @Data
    public class UserDiscussionInfo {
    
       private Boolean isBookmarked;
       private Integer lastTime;
       private Integer newCommentsCount;
    }

  • گروپ ڏيکاءَ جا تفصيل :

    package com.github.javarushcommunity.jrtb.javarushclient.dto;
    
    /**
    * Group Visibility status.
    */
    public enum GroupVisibilityStatus {
       UNKNOWN, RESTRICTED, PUBLIC, PROTECTED, PRIVATE, DISABLED, DELETED
    }

  • پوء - GroupInfo :

    package com.github.javarushcommunity.jrtb.javarushclient.dto;
    
    import lombok.Data;
    import lombok.ToString;
    
    /**
    * Group Info DTO class.
    */
    @Data
    @ToString
    public class GroupInfo {
    
       private Integer id;
       private String avatarUrl;
       private String createTime;
       private String description;
       private String key;
       private Integer levelToEditor;
       private MeGroupInfo meGroupInfo;
       private String pictureUrl;
       private String title;
       private GroupInfoType type;
       private Integer userCount;
       private GroupVisibilityStatus visibilityStatus;
    }

جيئن ته GroupInfo ۽ GroupDiscussionInfo لڳ ڀڳ هڪجهڙا آهن، اچو ته انهن کي وراثت ۾ ڳنڍيون - GroupDiscusionInfo :
package com.github.javarushcommunity.jrtb.javarushclient.dto;

import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;

/**
* Group discussion info class.
*/
@EqualsAndHashCode(callSuper = true)
@Data
@ToString(callSuper = true)
public class GroupDiscussionInfo extends GroupInfo {

   private UserDiscussionInfo userDiscussionInfo;
   private Integer commentsCount;
}
گروپ فلٽر جي درخواست لاءِ اسان کي فلٽر جي به ضرورت پوندي :
package com.github.javarushcommunity.jrtb.javarushclient.dto;

/**
* Filters for group requests.
*/
public enum GroupFilter {

   UNKNOWN, MY, ALL
}
ID ذريعي حاصل ڪرڻ جي درخواست ۾، اهو GroupDiscussionInfo واپس ڪري ٿو، ۽ گروپن جي مجموعن جي درخواست ۾، توهان ٻئي GroupInfo ۽ GroupDiscussionInfo حاصل ڪري سگهو ٿا. جيئن ته درخواستن ۾ قسم، سوال، فلٽر، آفسيٽ ۽ حد ٿي سگھي ٿي، اچو ته ھڪ الڳ GroupRequestArgs ڪلاس ٺاھيون ۽ ان کي بلڊر ڪلاس بڻايون (پڙھو ته بلڊر جو نمونو ڇا آھي):
package com.github.javarushcommunity.jrtb.javarushclient.dto;

import lombok.*;

import java.util.HashMap;
import java.util.Map;

import static java.util.Objects.nonNull;

/**
* Request arguments for group requests.
*/
@Builder
@Getter
public class GroupRequestArgs {

   private final String query;
   private final GroupInfoType type;
   private final GroupFilter filter;

   /**
    * specified where to start getting groups
    */
   private final Integer offset;
   /**
    * Limited number of groups.
    */
   private final Integer limit;

   public Map populateQueries() {
       Map queries = new HashMap<>();
       if(nonNull(query)) {
           queries.put("query", query);
       }
       if(nonNull(type)) {
           queries.put("type", type);
       }
       if(nonNull(filter)) {
           queries.put("filter", filter);
       }
       if(nonNull(offset)) {
           queries.put("offset", offset);
       }
       if(nonNull(limit)) {
           queries.put("limit", limit);
       }
       return queries;
   }
}
گروپن جي تعداد جي ڳولا لاء، ان کي ٿورو مختلف آهي. اهو صرف سوال، قسم ۽ فلٽر آهي. ۽ اهو لڳي ٿو ته توهان ڪوڊ کي نقل ڪرڻ نٿا چاهيو. ساڳئي وقت، جيڪڏهن توهان انهن کي گڏ ڪرڻ شروع ڪيو، اهو بدصورت ٿيندو جڏهن تعمير ڪندڙن سان ڪم ڪندي. تنهن ڪري مون انهن کي الڳ ڪرڻ جو فيصلو ڪيو ۽ ڪوڊ ٻيهر ورجايو. اھو اھو آھي جيڪو GroupCountRequestArgs وانگر ڏسڻ ۾ اچي ٿو :
package com.github.javarushcommunity.jrtb.javarushclient.dto;

import lombok.Builder;
import lombok.Getter;

import java.util.HashMap;
import java.util.Map;

import static java.util.Objects.nonNull;

/**
* Request arguments for group count requests.
*/
@Builder
@Getter
public class GroupsCountRequestArgs {
   private final String query;
   private final GroupInfoType type;
   private final GroupFilter filter;

   public Map populateQueries() {
       Map queries = new HashMap<>();
       if (nonNull(query)) {
           queries.put("query", query);
       }
       if (nonNull(type)) {
           queries.put("type", type);
       }
       if (nonNull(filter)) {
           queries.put("filter", filter);
       }
       return queries;
   }
}
ها، مون اهو ذڪر نه ڪيو آهي ته آخري ٻن طبقن ۾ هڪ poplateQueries طريقو آهي، جيڪو هڪ سوال ٺاهڻ لاءِ نقشو تيار ڪندو (توهان ان کي بعد ۾ ڏسندا). مٿي بيان ڪيل ڪلاسن جي بنياد تي، اچو ته JavaRushGroupClient لاءِ هڪ انٽرفيس ٺاهيون :
package com.github.javarushcommunity.jrtb.javarushclient;

import com.github.javarushcommunity.jrtb.javarushclient.dto.GroupDiscussionInfo;
import com.github.javarushcommunity.jrtb.javarushclient.dto.GroupInfo;
import com.github.javarushcommunity.jrtb.javarushclient.dto.GroupRequestArgs;
import com.github.javarushcommunity.jrtb.javarushclient.dto.GroupsCountRequestArgs;

import java.util.List;

/**
 * Client for Javarush Open API corresponds to Groups.
 */
public interface JavaRushGroupClient {

    /**
     * Get all the {@link GroupInfo} filtered by provided {@link GroupRequestArgs}.
     *
     * @param requestArgs provided {@link GroupRequestArgs}.
     * @return the collection of the {@link GroupInfo} objects.
     */
    List<GroupInfo> getGroupList(GroupRequestArgs requestArgs);

    /**
     * Get all the {@link GroupDiscussionInfo} filtered by provided {@link GroupRequestArgs}.
     *
     * @param requestArgs provided {@link GroupRequestArgs}
     * @return the collection of the {@link GroupDiscussionInfo} objects.
     */
    List<GroupDiscussionInfo> getGroupDiscussionList(GroupRequestArgs requestArgs);

    /**
     * Get count of groups filtered by provided {@link GroupRequestArgs}.
     *
     * @param countRequestArgs provided {@link GroupsCountRequestArgs}.
     * @return the count of the groups.
     */
    Integer getGroupCount(GroupsCountRequestArgs countRequestArgs);

    /**
     * Get {@link GroupDiscussionInfo} by provided ID.
     *
     * @param id provided ID.
     * @return {@link GroupDiscussionInfo} object.
     */
    GroupDiscussionInfo getGroupById(Integer id);
}
ڪيس لاءِ ٻه مختلف درخواستون جڏهن اسان حاصل ڪرڻ چاهيون ٿا GroupInfo يا GroupDiscussionInfo معلومات شامل ڪئي وئي. ٻي صورت ۾، اهي سوال هڪجهڙا آهن، ۽ فرق صرف اهو هوندو ته هڪ ۾ شامل بحث پرچم صحيح هوندو، ۽ ٻئي ۾ اهو غلط هوندو. تنهن ڪري، اتي 4 طريقا هئا، ٽي نه. هاڻي اچو ته عمل ڪرڻ شروع ڪريون:
package com.github.javarushcommunity.jrtb.javarushclient;

import com.github.javarushcommunity.jrtb.javarushclient.dto.GroupDiscussionInfo;
import com.github.javarushcommunity.jrtb.javarushclient.dto.GroupInfo;
import com.github.javarushcommunity.jrtb.javarushclient.dto.GroupRequestArgs;
import com.github.javarushcommunity.jrtb.javarushclient.dto.GroupsCountRequestArgs;
import kong.unirest.GenericType;
import kong.unirest.Unirest;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.util.List;

/**
* Implementation of the {@link JavaRushGroupClient} interface.
*/
@Component
public class JavaRushGroupClientImpl implements JavaRushGroupClient {

   private final String javarushApiGroupPath;

   public JavaRushGroupClientImpl(@Value("${javarush.api.path}") String javarushApi) {
       this.javarushApiGroupPath = javarushApi + "/groups";
   }

   @Override
   public List<GroupInfo> getGroupList(GroupRequestArgs requestArgs) {
       return Unirest.get(javarushApiGroupPath)
               .queryString(requestArgs.populateQueries())
               .asObject(new GenericType<list<GroupInfo>>() {
               })
               .getBody();
   }

   @Override
   public List<GroupDiscussionInfo> getGroupDiscussionList(GroupRequestArgs requestArgs) {
       return Unirest.get(javarushApiGroupPath)
               .queryString(requestArgs.populateQueries())
               .asObject(new GenericType<list<GroupDiscussionInfo>>() {
               })
               .getBody();
   }

   @Override
   public Integer getGroupCount(GroupsCountRequestArgs countRequestArgs) {
       return Integer.valueOf(
               Unirest.get(String.format("%s/count", javarushApiGroupPath))
                       .queryString(countRequestArgs.populateQueries())
                       .asString()
                       .getBody()
       );
   }

   @Override
   public GroupDiscussionInfo getGroupById(Integer id) {
       return Unirest.get(String.format("%s/group%s", javarushApiGroupPath, id.toString()))
               .asObject(GroupDiscussionInfo.class)
               .getBody();
   }


}
مان اڳ ۾ ئي واقف قدر تشريح استعمال ڪندي تعمير ڪندڙ ۾ API ڏانهن رستو شامل ڪريان ٿو. اهو ظاهر ڪري ٿو ته تشريح جي اندر جي قيمت ملڪيت جي فائل ۾ فيلڊ سان ملندڙ آهي. تنهن ڪري، اچو ته application.properties ۾ هڪ نئين لائن شامل ڪريون:
javarush.api.path=https://javarush.com/api/1.0/rest
ھاڻي ھاڻي ھاڻي ھڪڙي جڳھ تي سڀني API ڪلائنٽ لاءِ ھوندي، ۽ جيڪڏھن API جو رستو تبديل ٿئي ٿو، اسان ان کي جلدي اپڊيٽ ڪنداسين. اڳي، مون هڪ خوردبيني سان ناخن کي ڇڪايو، يونيورسٽ ذريعي http جي درخواست کان جواب حاصل ڪيو، ان کي اسٽرنگ ۾ ترجمو ڪيو ۽ پوء هن تار کي جڪسن جي ذريعي پارس ڪيو... اهو خوفناڪ، ٿڪل ۽ ڪيترن ئي اضافي شين جي ضرورت هئي. هن لائبريري ۾ توهان ڏسي سگهو ٿا ته اهو ڇا ڏسڻ ۾ اچي ٿو. جيترو جلد مون کي ان تي هٿ اچي ويندو، مان هر شيء کي رد ڪري ڇڏيندس.
ڪو به ماڻهو جيڪو هن لائبريري کي تازه ڪاري ڪرڻ جي ڪوشش ڪرڻ چاهي ٿو - صرف unirest لائبريري جا اوزار استعمال ڪندي حاصل ڪيل شيون شامل ڪريو - ذاتي پيغام ۾ لکو يا لائبريري ۾ ئي نئين مسئلي جي طور تي. اهو توهان لاءِ حقيقي ڪم جو تجربو هوندو، پر مون کي ڪو اعتراض ناهي. مان مڪمل ڪوڊ جو جائزو وٺندس ۽ جيڪڏھن ضروري ھجي مدد ڪندس.
هاڻي سوال آهي: ڇا اسان جو ڪوڊ ڪم ڪري ٿو جيئن اسان توقع ڪندا آهيون؟ جواب آسان آهي: توهان کي صرف انهن لاءِ ٽيسٽ لکڻ جي ضرورت آهي. جيئن مون هڪ دفعو کان وڌيڪ چيو آهي، ڊولپرز کي ٽيسٽ لکڻ جي قابل هوندو. تنهن ڪري، اسان جي Swagger UI استعمال ڪندي، اسان درخواستون موڪلينداسين، جوابن کي ڏسو ۽ انهن کي ٽيسٽ ۾ متبادل طور تي متوقع نتيجو طور تي. توهان شايد فوري طور تي محسوس ڪيو آهي ته گروپن جو تعداد جامد نه آهي ۽ تبديل ٿي سگهي ٿو. ۽ توهان صحيح آهيو. صرف سوال اهو آهي ته اهو نمبر ڪيترو وقت تبديل ٿئي ٿو؟ تمام ٿورڙو، تنهنڪري ڪيترن ئي مهينن جي دوران اسان اهو چئي سگهون ٿا ته هي قدر جامد ٿيندو. ۽ جيڪڏھن ڪجھ تبديل ٿي وڃي، اسان ٽيسٽ کي اپڊيٽ ڪنداسين. ملو - JavaRushGroupClientTest:
package com.github.javarushcommunity.jrtb.javarushclient;

import com.github.javarushcommunity.jrtb.javarushclient.dto.GroupDiscussionInfo;
import com.github.javarushcommunity.jrtb.javarushclient.dto.GroupInfo;
import com.github.javarushcommunity.jrtb.javarushclient.dto.GroupRequestArgs;
import com.github.javarushcommunity.jrtb.javarushclient.dto.GroupsCountRequestArgs;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

import java.util.List;

import static com.github.javarushcommunity.jrtb.javarushclient.dto.GroupInfoType.TECH;

@DisplayName("Integration-level testing for JavaRushGroupClientImplTest")
class JavaRushGroupClientTest {

   private final JavaRushGroupClient groupClient = new JavaRushGroupClientImpl("https://javarush.com/api/1.0/rest");

   @Test
   public void shouldProperlyGetGroupsWithEmptyArgs() {
       //given
       GroupRequestArgs args = GroupRequestArgs.builder().build();

       //when
       List<GroupInfo> groupList = groupClient.getGroupList(args);

       //then
       Assertions.assertNotNull(groupList);
       Assertions.assertFalse(groupList.isEmpty());
   }

   @Test
   public void shouldProperlyGetWithOffSetAndLimit() {
       //given
       GroupRequestArgs args = GroupRequestArgs.builder()
               .offset(1)
               .limit(3)
               .build();

       //when
       List<GroupInfo> groupList = groupClient.getGroupList(args);

       //then
       Assertions.assertNotNull(groupList);
       Assertions.assertEquals(3, groupList.size());
   }

   @Test
   public void shouldProperlyGetGroupsDiscWithEmptyArgs() {
       //given
       GroupRequestArgs args = GroupRequestArgs.builder().build();

       //when
       List<GroupDiscussionInfo> groupList = groupClient.getGroupDiscussionList(args);

       //then
       Assertions.assertNotNull(groupList);
       Assertions.assertFalse(groupList.isEmpty());
   }

   @Test
   public void shouldProperlyGetGroupDiscWithOffSetAndLimit() {
       //given
       GroupRequestArgs args = GroupRequestArgs.builder()
               .offset(1)
               .limit(3)
               .build();

       //when
       List<GroupDiscussionInfo> groupList = groupClient.getGroupDiscussionList(args);

       //then
       Assertions.assertNotNull(groupList);
       Assertions.assertEquals(3, groupList.size());
   }

   @Test
   public void shouldProperlyGetGroupCount() {
       //given
       GroupsCountRequestArgs args = GroupsCountRequestArgs.builder().build();

       //when
       Integer groupCount = groupClient.getGroupCount(args);

       //then
       Assertions.assertEquals(30, groupCount);
   }

   @Test
   public void shouldProperlyGetGroupTECHCount() {
       //given
       GroupsCountRequestArgs args = GroupsCountRequestArgs.builder()
               .type(TECH)
               .build();

       //when
       Integer groupCount = groupClient.getGroupCount(args);

       //then
       Assertions.assertEquals(7, groupCount);
   }

   @Test
   public void shouldProperlyGetGroupById() {
       //given
       Integer androidGroupId = 16;

       //when
       GroupDiscussionInfo groupById = groupClient.getGroupById(androidGroupId);

       //then
       Assertions.assertNotNull(groupById);
       Assertions.assertEquals(16, groupById.getId());
       Assertions.assertEquals(TECH, groupById.getType());
       Assertions.assertEquals("android", groupById.getKey());
   }
}
ٽيسٽ به ساڳي انداز ۾ لکيا ويا آهن جيئن اڳ. هر درخواست لاء ڪيترائي امتحان آهن. هر شي کي جانچڻ ۾ ڪو به نقطو ناهي، ڇاڪاڻ ته مان سمجهان ٿو ته هي API اڳ ۾ ئي بهترين طريقي سان آزمائي چڪو آهي.

نتيجو

هن آرٽيڪل جي حصي جي طور تي، اسان هڪ جاوا ڪلائنٽ شامل ڪيو گروپن لاءِ JavaRush API ۾. جيئن اهي چون ٿا، جيو ۽ سکيو. جڏهن آئون هن ڪلائنٽ کي لکي رهيو هوس، مون انهن جي دستاويزن جو فائدو ورتو ۽ آسانيء سان ڪم استعمال ڪيو انهن شين سان جيڪي اهي مهيا ڪن ٿا. مان توھان جو ڌيان انھيءَ ڪم ڏانھن ڏيان ٿو جيڪو مون تجويز ڪيو آھي. جيڪڏهن ڪنهن کي دلچسپي آهي، مون کي هڪ خانگي پيغام لکو، مون کي يقين آهي ته اهو هڪ تمام دلچسپ تجربو هوندو. هي پهريون حصو هو. ٻئي ۾، اسان سڌو سنئون شامل ڪرڻ واري حڪم کي لاڳو ڪنداسين ۽ (جيڪڏهن اسان ان کي هڪ مضمون ۾ فٽ ڪريون) اسان گروپن جي لسٽ حاصل ڪرڻ ۾ شامل ڪنداسين جنهن ۾ صارف رڪنيت حاصل ڪئي آهي. اڳيون، ڪنهن کي به خواهش ۽ قابليت آهي ته بوٽ لاء نصوص لکڻ لاء، مهرباني ڪري مون کي پي ايم ۾ لکندا. مان هن معاملي ۾ ماهر نه آهيان ۽ ڪا به مدد تمام مددگار ثابت ٿيندي. اچو ته هن سڀني کي اوپن سورس ڊولپمينٽ جي طور تي رسمي ڪريون، اهو دلچسپ ٿيندو! خير، هميشه وانگر - پسند ڪريو، رڪنيت حاصل ڪريو، گھنٽي ڏيو ، اسان جي پروجيڪٽ کي اسٽار ڏيو ، تبصرو لکو ۽ مضمون جي شرح ڪريو!
مفيد لنڪس

سيريز ۾ سڀني مواد جي هڪ فهرست هن مضمون جي شروعات ۾ آهي.

تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION