60 |
61 |
We're sorry, but something went wrong.
62 |
63 |
If you are the application owner check the logs for more information.
64 |
65 |
66 |
67 |
--------------------------------------------------------------------------------
/public/apple-touch-icon-precomposed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sokusekiya/sokuseki/65c4ef950ebbdcb926355011723d2bcd0baf18ba/public/apple-touch-icon-precomposed.png
--------------------------------------------------------------------------------
/public/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sokusekiya/sokuseki/65c4ef950ebbdcb926355011723d2bcd0baf18ba/public/apple-touch-icon.png
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sokusekiya/sokuseki/65c4ef950ebbdcb926355011723d2bcd0baf18ba/public/favicon.ico
--------------------------------------------------------------------------------
/public/robots.txt:
--------------------------------------------------------------------------------
1 | # See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file
2 |
--------------------------------------------------------------------------------
/spec/factories/activities.rb:
--------------------------------------------------------------------------------
1 | FactoryBot.define do
2 | factory :activity do
3 | sequence(:activity_id, &:to_s)
4 | activity_type { "IssuesEvent" }
5 | acted_at { Time.current }
6 |
7 | user { nil }
8 | authentication { nil }
9 |
10 | trait :commit_comment_event do
11 | activity_type { "CommitCommentEvent" }
12 | end
13 |
14 | trait :issue_event do
15 | activity_type { "IssuesEvent" }
16 | end
17 |
18 | trait :pull_request_event do
19 | activity_type { "PullRequestEvent" }
20 | end
21 | end
22 | end
23 |
--------------------------------------------------------------------------------
/spec/factories/authentications.rb:
--------------------------------------------------------------------------------
1 | FactoryBot.define do
2 | factory :authentication do
3 | provider { "github" }
4 | sequence(:uid, &:to_s)
5 | name { "yinm" }
6 | access_token { "abcde12345" }
7 |
8 | user { nil }
9 | end
10 | end
11 |
--------------------------------------------------------------------------------
/spec/factories/shared_links.rb:
--------------------------------------------------------------------------------
1 | FactoryBot.define do
2 | factory :shared_link do
3 | user { nil }
4 | expired_at { "2019-10-26 18:26:58" }
5 | on { "MyString" }
6 | token { "MyString" }
7 | end
8 | end
9 |
--------------------------------------------------------------------------------
/spec/factories/users.rb:
--------------------------------------------------------------------------------
1 | FactoryBot.define do
2 | factory :user do
3 | name { "yinm" }
4 | avatar_url { "https://example.com/avatars" }
5 | end
6 | end
7 |
--------------------------------------------------------------------------------
/spec/models/activity_spec.rb:
--------------------------------------------------------------------------------
1 | require "rails_helper"
2 |
3 | RSpec.describe Activity, type: :model do
4 | describe ".issue_and_pr" do
5 | let(:user) { create(:user) }
6 | let(:authentication) { create(:authentication, user:) }
7 | let!(:issue_event) { create(:activity, :issue_event, user:, authentication:) }
8 | let!(:pull_request_event) { create(:activity, :pull_request_event, user:, authentication:) }
9 | let!(:commit_comment_event) { create(:activity, :commit_comment_event, user:, authentication:) }
10 |
11 | it "IssuesEvent, PullRequestEventだけを取得する" do
12 | expect(Activity.issue_and_pr).to contain_exactly(issue_event, pull_request_event)
13 | end
14 | end
15 | end
16 |
--------------------------------------------------------------------------------
/spec/models/shared_link_spec.rb:
--------------------------------------------------------------------------------
1 | require "rails_helper"
2 |
3 | RSpec.describe SharedLink, type: :model do
4 | let(:user) { create(:user) }
5 | let(:token) { SecureRandom.hex(32) }
6 | let(:expired_at) { 30.minutes.after }
7 | let(:on) { "2019-12" }
8 |
9 | subject do
10 | SharedLink.new(token:, expired_at:, on:, user:)
11 | end
12 |
13 | describe "validation" do
14 | it { is_expected.to be_valid }
15 |
16 | context "on is nil" do
17 | let(:on) {
18 | nil
19 | }
20 | it { is_expected.to be_invalid }
21 | end
22 |
23 | context "on is too long" do
24 | let(:on) {
25 | SecureRandom.hex(512)
26 | }
27 | it { is_expected.to be_invalid }
28 | end
29 | end
30 | end
31 |
--------------------------------------------------------------------------------
/spec/rails_helper.rb:
--------------------------------------------------------------------------------
1 | # This file is copied to spec/ when you run 'rails generate rspec:install'
2 | require "spec_helper"
3 | ENV["RAILS_ENV"] ||= "test"
4 | require File.expand_path("../config/environment", __dir__)
5 | # Prevent database truncation if the environment is production
6 | abort("The Rails environment is running in production mode!") if Rails.env.production?
7 | require "rspec/rails"
8 | # Add additional requires below this line. Rails is not loaded until this point!
9 |
10 | # Requires supporting ruby files with custom matchers and macros, etc, in
11 | # spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are
12 | # run as spec files by default. This means that files in spec/support that end
13 | # in _spec.rb will both be required and run as specs, causing the specs to be
14 | # run twice. It is recommended that you do not name files matching this glob to
15 | # end with _spec.rb. You can configure this pattern with the --pattern
16 | # option on the command line or in ~/.rspec, .rspec or `.rspec-local`.
17 | #
18 | # The following line is provided for convenience purposes. It has the downside
19 | # of increasing the boot-up time by auto-requiring all files in the support
20 | # directory. Alternatively, in the individual `*_spec.rb` files, manually
21 | # require only the support files necessary.
22 | #
23 | Dir[Rails.root.join("spec", "support", "**", "*.rb")].each { |f| require f }
24 |
25 | require "support/factory_bot"
26 |
27 | # Checks for pending migrations and applies them before tests are run.
28 | # If you are not using ActiveRecord, you can remove these lines.
29 | begin
30 | ActiveRecord::Migration.maintain_test_schema!
31 | rescue ActiveRecord::PendingMigrationError => e
32 | puts e.to_s.strip
33 | exit 1
34 | end
35 | RSpec.configure do |config|
36 | # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
37 | config.fixture_path = "#{Rails.root}/spec/fixtures"
38 |
39 | # If you're not using ActiveRecord, or you'd prefer not to run each of your
40 | # examples within a transaction, remove the following line or assign false
41 | # instead of true.
42 | config.use_transactional_fixtures = true
43 |
44 | # RSpec Rails can automatically mix in different behaviours to your tests
45 | # based on their file location, for example enabling you to call `get` and
46 | # `post` in specs under `spec/controllers`.
47 | #
48 | # You can disable this behaviour by removing the line below, and instead
49 | # explicitly tag your specs with their type, e.g.:
50 | #
51 | # RSpec.describe UsersController, :type => :controller do
52 | # # ...
53 | # end
54 | #
55 | # The different available types are documented in the features, such as in
56 | # https://relishapp.com/rspec/rspec-rails/docs
57 | config.infer_spec_type_from_file_location!
58 |
59 | # Filter lines from Rails gems in backtraces.
60 | config.filter_rails_from_backtrace!
61 | # arbitrary gems may also be filtered via:
62 | # config.filter_gems_from_backtrace("gem name")
63 | end
64 |
--------------------------------------------------------------------------------
/spec/requests/sessions_spec.rb:
--------------------------------------------------------------------------------
1 | require "rails_helper"
2 |
3 | RSpec.describe "Sessions", type: :request do
4 | describe "GET /auth/github/callback" do
5 | context "登録済みのユーザーのとき" do
6 | let(:user) { create(:user) }
7 | let!(:authentication) { create(:authentication, user:, uid: "12345") }
8 |
9 | before do
10 | OmniAuth.config.mock_auth[:github] = OmniAuth::AuthHash.new({
11 | provider: "github",
12 | uid: "12345",
13 | info: {
14 | nickname: "yinm",
15 | },
16 | credentials: {
17 | token: "abcde12345",
18 | },
19 | })
20 | end
21 |
22 | it "ユーザーを作らない" do
23 | expect { get "/auth/github/callback" }.not_to change(User, :count)
24 | end
25 |
26 | it "GitHubのusernameに変更がない場合は、更新処理を行わない" do
27 | expect { get "/auth/github/callback" }.not_to change { authentication.reload.updated_at }
28 | end
29 |
30 | it "GitHubのusernameに変更がある場合は、変更に追従する" do
31 | OmniAuth.config.mock_auth[:github] = OmniAuth::AuthHash.new({
32 | provider: "github",
33 | uid: "12345",
34 | info: {
35 | nickname: "yinm_updated",
36 | },
37 | credentials: {
38 | token: "abcde12345",
39 | },
40 | })
41 |
42 | expect { get "/auth/github/callback" }.to change { authentication.reload.name }.from("yinm").to("yinm_updated")
43 | end
44 |
45 | it "GitHubのaccess tokenに変更がある場合は、変更に追従する" do
46 | OmniAuth.config.mock_auth[:github] = OmniAuth::AuthHash.new({
47 | provider: "github",
48 | uid: "12345",
49 | info: {
50 | nickname: "yinm_updated",
51 | },
52 | credentials: {
53 | token: "update_token",
54 | },
55 | })
56 |
57 | expect { get "/auth/github/callback" }.to change { authentication.reload.name }.from("yinm").to("yinm_updated")
58 | end
59 |
60 | it "root_pathにリダイレクトする" do
61 | get "/auth/github/callback"
62 | expect(response).to redirect_to(root_path)
63 | end
64 | end
65 |
66 | context "未登録のユーザーのとき" do
67 | before do
68 | OmniAuth.config.mock_auth[:github] = OmniAuth::AuthHash.new({
69 | provider: "github",
70 | uid: "99999",
71 | info: {
72 | nickname: "new user",
73 | image: "https://example.com/avatar.png",
74 | },
75 | credentials: {
76 | token: "abcd1234",
77 | },
78 | })
79 | end
80 |
81 | it "ユーザーを作る" do
82 | expect { get "/auth/github/callback" }.to change(User, :count).by(1)
83 | end
84 |
85 | it "root_pathにリダイレクトする" do
86 | get "/auth/github/callback"
87 | expect(response).to redirect_to(root_path)
88 | end
89 | end
90 | end
91 | end
92 |
--------------------------------------------------------------------------------
/spec/spec_helper.rb:
--------------------------------------------------------------------------------
1 | # This file was generated by the `rails generate rspec:install` command. Conventionally, all
2 | # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3 | # The generated `.rspec` file contains `--require spec_helper` which will cause
4 | # this file to always be loaded, without a need to explicitly require it in any
5 | # files.
6 | #
7 | # Given that it is always loaded, you are encouraged to keep this file as
8 | # light-weight as possible. Requiring heavyweight dependencies from this file
9 | # will add to the boot time of your test suite on EVERY test run, even for an
10 | # individual file that may not need all of that loaded. Instead, consider making
11 | # a separate helper file that requires the additional dependencies and performs
12 | # the additional setup, and require it from the spec files that actually need
13 | # it.
14 | #
15 | # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
16 | RSpec.configure do |config|
17 | # rspec-expectations config goes here. You can use an alternate
18 | # assertion/expectation library such as wrong or the stdlib/minitest
19 | # assertions if you prefer.
20 | config.expect_with :rspec do |expectations|
21 | # This option will default to `true` in RSpec 4. It makes the `description`
22 | # and `failure_message` of custom matchers include text for helper methods
23 | # defined using `chain`, e.g.:
24 | # be_bigger_than(2).and_smaller_than(4).description
25 | # # => "be bigger than 2 and smaller than 4"
26 | # ...rather than:
27 | # # => "be bigger than 2"
28 | expectations.include_chain_clauses_in_custom_matcher_descriptions = true
29 | end
30 |
31 | # rspec-mocks config goes here. You can use an alternate test double
32 | # library (such as bogus or mocha) by changing the `mock_with` option here.
33 | config.mock_with :rspec do |mocks|
34 | # Prevents you from mocking or stubbing a method that does not exist on
35 | # a real object. This is generally recommended, and will default to
36 | # `true` in RSpec 4.
37 | mocks.verify_partial_doubles = true
38 | end
39 |
40 | # This option will default to `:apply_to_host_groups` in RSpec 4 (and will
41 | # have no way to turn it off -- the option exists only for backwards
42 | # compatibility in RSpec 3). It causes shared context metadata to be
43 | # inherited by the metadata hash of host groups and examples, rather than
44 | # triggering implicit auto-inclusion in groups with matching metadata.
45 | config.shared_context_metadata_behavior = :apply_to_host_groups
46 |
47 | # The settings below are suggested to provide a good initial experience
48 | # with RSpec, but feel free to customize to your heart's content.
49 | # # This allows you to limit a spec run to individual examples or groups
50 | # # you care about by tagging them with `:focus` metadata. When nothing
51 | # # is tagged with `:focus`, all examples get run. RSpec also provides
52 | # # aliases for `it`, `describe`, and `context` that include `:focus`
53 | # # metadata: `fit`, `fdescribe` and `fcontext`, respectively.
54 | # config.filter_run_when_matching :focus
55 | #
56 | # # Allows RSpec to persist some state between runs in order to support
57 | # # the `--only-failures` and `--next-failure` CLI options. We recommend
58 | # # you configure your source control system to ignore this file.
59 | # config.example_status_persistence_file_path = "spec/examples.txt"
60 | #
61 | # # Limits the available syntax to the non-monkey patched syntax that is
62 | # # recommended. For more details, see:
63 | # # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/
64 | # # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
65 | # # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode
66 | # config.disable_monkey_patching!
67 | #
68 | # # Many RSpec users commonly either run the entire suite or an individual
69 | # # file, and it's useful to allow more verbose output when running an
70 | # # individual spec file.
71 | # if config.files_to_run.one?
72 | # # Use the documentation formatter for detailed output,
73 | # # unless a formatter has already been configured
74 | # # (e.g. via a command-line flag).
75 | # config.default_formatter = "doc"
76 | # end
77 | #
78 | # # Print the 10 slowest examples and example groups at the
79 | # # end of the spec run, to help surface which specs are running
80 | # # particularly slow.
81 | # config.profile_examples = 10
82 | #
83 | # # Run specs in random order to surface order dependencies. If you find an
84 | # # order dependency and want to debug it, you can fix the order by providing
85 | # # the seed, which is printed after each run.
86 | # # --seed 1234
87 | # config.order = :random
88 | #
89 | # # Seed global randomization in this process using the `--seed` CLI option.
90 | # # Setting this allows you to use `--seed` to deterministically reproduce
91 | # # test failures related to randomization by passing the same `--seed` value
92 | # # as the one that triggered the failure.
93 | # Kernel.srand config.seed
94 | end
95 |
--------------------------------------------------------------------------------
/spec/support/factory_bot.rb:
--------------------------------------------------------------------------------
1 | RSpec.configure do |config|
2 | config.include FactoryBot::Syntax::Methods
3 | end
4 |
--------------------------------------------------------------------------------
/spec/support/omniauth.rb:
--------------------------------------------------------------------------------
1 | OmniAuth.config.test_mode = true
2 |
--------------------------------------------------------------------------------
/tmp/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sokusekiya/sokuseki/65c4ef950ebbdcb926355011723d2bcd0baf18ba/tmp/.keep
--------------------------------------------------------------------------------
/vendor/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sokusekiya/sokuseki/65c4ef950ebbdcb926355011723d2bcd0baf18ba/vendor/.keep
--------------------------------------------------------------------------------